0

我有一个UIViewController(ViewControllerA),在此UIViewController我想添加一个UITableView占据屏幕一部分的子视图(名为TableLoadGroupMembersViewController)。我已经为UITableView, 称为TableLoadGroupMembersViewController.

ViewControllerA.h我已经TableLoadGroupMembersViewController通过以下方式导入:

#import "TableLoadGroupMembersViewController.h"

ViewcontrollerA.m我想在UITableView按下按钮时创建直通代码。我想UITableViewTableLoadGroupMembersViewController. 如何设置UITableView读取的信息TableLoadGroupMembersViewController

我试过这样:

UITableView* tableVIEW = [[UITableView alloc]init];
TableLoadGroupMembersViewController* tableDelegate = [[TableLoadGroupMembersViewController     alloc] init];
[tableVIEW setDelegate:tableDelegate];
[tableVIEW setDataSource:tableDelegate];

[self.view addSubview:tableVIEW]; 

但这会使应用程序崩溃。我该怎么做?

编辑:

这是给出的错误:

0x387209b:  movl   8(%edx), %edi   ....  Thread 1 EXE Bad access
4

1 回答 1

1

UITableView 不保留其数据源或委托,仅分配。

因此,如果您使用 ARC,您的TableLoadGroupMembersViewController实例会在您退出创建 tableView 的方法时被释放。在实例被释放后 dataSource 和委托指向一个无效的内存地址(因为他们的 @property is assignand not weak

您可以创建TableLoadGroupMembersViewController* tableDelegate一个强实例变量,然后它不会被释放。

像这样的东西。

// .h
@property (strong, nonatomic) TableLoadGroupMembersViewController* tableDelegate; 

// .m

UITableView* tableVIEW = [[UITableView alloc]init];
TableLoadGroupMembersViewController* tableDelegate = [[TableLoadGroupMembersViewController     alloc] init];
self.tableDelegate = tableDelegate;
[tableVIEW setDelegate:tableDelegate];
[tableVIEW setDataSource:tableDelegate];

[self.view addSubview:tableVIEW]; 
于 2013-06-14T15:13:25.660 回答