Объект, созданный в Interface Builder, слишком рано удаляется - PullRequest
0 голосов
/ 10 апреля 2010

Проект

Я работаю над относительно простым проектом iPhone OS, основанным на контроллере навигации, с представлением корневой таблицы и представлением подробных таблиц. Коснитесь элемента в главном списке, чтобы просмотреть его детали в виде таблицы.

Настройка

Я разбил источник данных для обоих представлений на их собственные объекты, чтобы не запутать назначение контроллера представлений. После этого у табличных представлений больше нет источников данных, поскольку эти методы теперь находятся в отдельных файлах, поэтому я создал экземпляр каждого класса источника данных в соответствующих файлах XIB с элементом Object (перетащил его, затем установил его класс). , Затем, чтобы на самом деле соединить представления таблиц с их источниками данных, я установил выход данных dataSource для каждого представления таблицы на желтый объект источника данных в Интерфейсном Разработчике. Делегаты табличного представления все еще установлены на свои контроллеры представления.

Проблема

Представление корневой таблицы работает просто отлично, но когда вы нажимаете строку, чтобы перейти к подробному представлению, объект источника данных создается, как и ожидалось, а затем немедленно освобождается, вызывая сбой (numberOfSectionsInTableView: вызывается для освобожденного объект). Я не могу понять, почему источник данных автоматически освобождается, когда он мне нужен прямо здесь и сейчас для подробного представления, как указано моим созданием объекта источника данных и соединением представления таблицы в Интерфейсном Разработчике. Еще более озадачивает то, что сам подход прекрасно работает для корневого представления таблицы!

Вопрос

Есть ли что-то очевидное, что я пропускаю, что могло бы вызвать это? Или это даже правильный способ создания источника данных для контроллера табличного представления? Похоже, плохое объектно-ориентированное программирование делает это из контроллера view , который должен касаться только вида. Я мог бы втиснуть все в два класса контроллера табличного представления, и это, вероятно, сработало бы, но это было бы не так модульно, как хотелось бы.

Спасибо!

1 Ответ

1 голос
/ 10 апреля 2010

Как выглядит свойство вашего источника данных detail-table-view-controller? Ты звонишь удержать на нем? Возможно, проблема в том, что у вас есть:

@property (nonatomic, assign) IBOutlet id <UITableViewDataSource> dataSource

Вместо:

@property (nonatomic, retain) IBOutlet id <UITableViewDataSource> dataSource
...