tôi có một cái UIViewController
(ViewControllerA),在这个 UIViewController
中,我想添加一个占据部分屏幕的 UITableView
subview (名为TableLoadGroupMembersViewController
)。我已经为 UITableView
创建了名为 TableLoadGroupMembersViewController
lớp học.
hiện hữuViewControllerA.h
中,我通过以下方式导入了TableLoadGroupMembersViewController
:
#import "TableLoadGroupMembersViewController.h"
hiện hữuViewcontrollerA.m
中,我想在按下按钮时通过代码创建UITableView
。我希望 UITableView
từ TableLoadGroupMembersViewController
加载内容。如何设置UITableView
读取TableLoadGroupMembersViewController
的信息?
我尝试过这样的方式:
UITableView* tableVIEW = [[UITableView alloc]init];
TableLoadGroupMembersViewController* tableDelegate = [[TableLoadGroupMembersViewController alloc] init];
[tableVIEW setDelegate:tableDelegate];
[tableVIEW setDataSource:tableDelegate];
[self.view addSubview:tableVIEW];
但这会使应用程序崩溃。我应该怎么做?
biên tập:
这是给出的错误:
0x387209b: movl 8(%edx), %edi .... Thread 1 EXE Bad access
UITableView 不保留其数据源或委托(delegate),这些仅被分配。
因此,如果您使用 ARC,当您退出创建 tableView 的方法时,您的 TableLoadGroupMembersViewController
实例将被释放。实例被释放后,dataSource 和 delegate 指向无效的内存地址(因为它们的 @property 是 assign
thay vì 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];
Tôi là một lập trình viên xuất sắc, rất giỏi!