Xcode 4, приложение на основе представления + UITableView падает при прокрутке - PullRequest
1 голос
/ 16 сентября 2011

В Xcode запустите новый проект с шаблоном приложения на основе представления (только для 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];

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

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

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

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

1 Ответ

3 голосов
/ 16 сентября 2011

Проблема решена.

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

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

@interface ViewBasedAppViewController : UIViewController {

    IBOutlet UITableView *table;
    IBOutlet TableViewController *tableController;
}

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

...