如果我想为我的uitableview设置我的委托和数据源,我的应用程序崩溃了。我做错了什么?
- (void)loadView {
NSLog(@"AddListViewController");
ShareListViewController *shareListViewController = [[ShareListViewController alloc] init];
UITableView *shareListView = [[UITableView alloc]initWithFrame:CGRectMake(100, 30, 100, 200) style:UITableViewStylePlain];
shareListView.delegate = shareListViewController;
shareListView.dataSource = shareListViewController;
[self.navigationController.view addSubview:shareListView];
[shareListViewController release];
}
我的ShareListViewController
@interface ShareListViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource>{
}
@end
如果删除协议,它也无效。
感谢您的帮助
答案 0 :(得分:1)
您正在发布shareListController
控制器。这是错误的,因为两者都将dataSource
属性以及表视图的delegate
属性声明为具有保留策略assign
,这意味着它们不 retain
他们的价值观。这是客户端应用程序/视图控制器的职责。
@property(nonatomic, assign) id<UITableViewDelegate> delegate
@property(nonatomic, assign) id<UITableViewDataSource> dataSource
最好的方法似乎是在视图控制器中声明一个ivar,如:
@interface MyViewController: UIViewController {
... other stuff ...
UITableView* shareListView;
ShareListController* shareListController;
}
... more stuff ...
@end
在MyViewController
的{{1}}(或者,您设置表格视图的任何其他地方)viewDidLoad
/ alloc
照常init
,而是在设置shareListController
和dataSource
属性后释放对象时,您会记住delegate
ivar中的引用(您仍然拥有它)。
最后,在视图控制器的shareListController
方法中,执行:
dealloc