Вы выпускаете контроллер shareListController
. Это неправильно, поскольку как свойство dataSource
, так и свойство delegate
представления таблицы объявлены как имеющие политику хранения assign
, что означает, что они не retain
их ценности. Это ответственность клиентского приложения / контроллера представления.
@property(nonatomic, assign) id<UITableViewDelegate> delegate
@property(nonatomic, assign) id<UITableViewDataSource> dataSource
См. Справочник UITableView .
Лучше всего объявить ivar в вашем контроллере вида следующим образом:
@interface MyViewController: UIViewController {
... other stuff ...
UITableView* shareListView;
ShareListController* shareListController;
}
... more stuff ...
@end
В MyViewController
viewDidLoad
(или, где бы вы ни настраивали представление таблицы) alloc
/ init
shareListController
как обычно, но вместо освобождения объекта после настройки Свойства dataSource
и delegate
, вы помните ссылку (она у вас есть) в shareListController
ivar.
Наконец, в методе dealloc
контроллера представления выполните:
- (void) dealloc {
... release other stuff ...
shareListView.delegate = nil; // Really, really defensive
shareListView.dataSource = nil; // here, but it won't hurt
[shareListView release];
[shareListController release];
[super dealloc];
}