Xcode 4, приложение на основе View + UITableView вылетает при прокрутке вверх

51
7

В Xcode запустите новый проект с шаблоном приложения на основе View (только для iPhone).

В xib для представления (ProjectNameViewController.xib) с помощью Interface Builder добавьте TableView.

Создайте новый подкласс класса Objective-C UITableView, в файле заголовка добавьте протокол UITableViewDataSource и добавьте этот атрибут:

NSArray *data;

В файле реализации реализованы 2 требуемых метода:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

return [data count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString* identifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];

if (!cell) {

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
}

cell.textLabel.text = [data objectAtIndex:indexPath.row];

return cell;
}

В методе init добавьте следующее:

data = [[NSArray arrayWithObjects:@"First", @"Second", @"Third", nil] retain];

Вернитесь к Interface Builder, добавьте новый объект с предыдущим пользовательским классом (Identity inspector). В UITableView (в построителе интерфейса в инспекторе соединений) добавьте выходной источник данных на предыдущий объект.

Запустите приложение, он отобразит таблицу с данными, а затем, когда вы прокрутите ее вверх, он разбился с сигналом: "EXC_BAD_ACCESS" в основном потоке (без исключения).

Я мало нового для Xcode + Interface Builder с Cocoa Framework, я пытаюсь понять Movel-View-Controller для создания приложений с многоразовым кодом, но я не могу понять, как я могу разделить объекты для make-контроллеров для каждого UI в приложении, потому что в этом случае, если я положу методы в класс, подклассифицированный файловым владельцем (с протоколом таким же образом класса выше), все это работает. Но класс File Owner - это ViewController, и я хочу, чтобы TableView был отделен от любого другого объекта приложения. Скажите мне, если это не способ создания приложения (рекомендуемый способ).

Заранее спасибо.

спросил(а) 2011-09-16T01:41:00+04:00 8 лет, 5 месяцев назад
1
Решение
70

Задача решена.

В ViewController добавьте 2 IBOutlet:

Один для UITableView и один для TableViewController (пример):

@interface ViewBasedAppViewController : UIViewController {

IBOutlet UITableView *table;
IBOutlet TableViewController *tableController;
}

TableViewController - это NSObject. В Interface Builder подключите выходы: от владельца файла до таблицы выберите "table"; От владельца файла до объекта TableViewController выберите "tableController";

ответил(а) 2011-09-16T16:31:00+04:00 8 лет, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема