UITableviewController 失去对 tableview 的引用
Posted
技术标签:
【中文标题】UITableviewController 失去对 tableview 的引用【英文标题】:UITableviewController losing reference to tableview 【发布时间】:2011-08-06 15:13:43 【问题描述】:我已经为此工作了 2 天,似乎无法掌握。我想我错过了一些非常基本的东西。
这是我所拥有的:
作为 Apps 根控制器的 UIViewController。 有一个 ContainerView,它是 UIView 的一个子类,我将它添加到我的根控制器视图中。 其中我想要一个 UITableView。
由于有几个不同的容器,我为每个容器设置了不同的 Nib。
这是它的连接方式:带有内容的 Nib,将容器作为其文件的所有者。 UITableView 有一个出口,它有容器作为源和委托。
容器实现协议方法。
现在我不能在 UITableView 上调用 reloaddata,因为它是 nil。我在控制台中输入 po 并显示 0x0 但我不知道为什么。
我一直在尝试不同的方法,但最终都失去了对 tableView 的引用。
这不像是我创建的第一个 tableview,但我不知道我在这里做错了什么。
请帮忙!!!!
代码:
这是我的奥特莱斯:
IBOutlet UITableView *contactsTV;
文件的所有者与之有关联,tableview 反之亦然。
我通过以下方式创建笔尖:
Contentview *v = [[Contentview alloc] initWithFrame:[[contentViewArray objectAtIndex:i] CGRectValue]];
虽然 contentViewArray 是一些将 Framevalues 存储为字符串的数组。 然后我做:
[v prepareView];
它看起来像这样:
- (void) prepareView
NSArray *mediaPlayerViews = [[NSBundle mainBundle] loadNibNamed:@"MyView"
owner:self
options:nil];
UIView *v = (UIView *)[mediaPlayerViews objectAtIndex:0];
[self addSubview:v];
【问题讨论】:
如果你发布一些代码,找到问题会容易得多。也许您没有将 tableview 连接到 nib 中的正确对象? 添加了一些代码 - 希望对您有所帮助。 当你说[self addSubview:v]时,这里的“self”是UIView,还是UIViewController? 【参考方案1】:刚刚遇到了一个类似的问题——一切似乎都正确连接(Xcode 4),但插座参考为零。
当我创建文件时,我使用了 UITableViewController 的“新文件”-> 子类。使用 NIB(自动)过程来设置文件。这导致控制器被声明为 UITableViewController 并且 NIB 有一个 UITableView 作为它的根。
虽然 TableDataSource 和 TableDelegate 方法按预期调用,但在加载 nib 时从未设置 TableView 的出口。
为了解决这个问题,我基本上不得不将控制器从 UITableViewController 的子类更改为 UIViewController 并相应地设置 NIB:我清除了 NIB,添加了一个 UIView 和一个 UITableView 作为一个子类,重新连接了插座(查看, TableView、TableDataSource 和 TableDelegate),一切都按计划进行。
当使用 NIB 创建 UITableView 的子类时,我认为这可能是 XCode 的一个错误。
【讨论】:
【参考方案2】:将其设置为UITableViewController
它应该可以工作。
【讨论】:
我必须这样做吗?我认为我的方法是处理它的正确方法。此外,我把它作为 UITableViewController 并没有工作 - 同样的问题,失去了参考.....:/ 在各个点尝试 NSLogging 并检查数组中的值并尝试显示self.tableView
我之前像这样添加了 tableview - self.tableview - .....它看起来很正常,也有反应,但是一旦一切都设置好了,我就再也无法达到它了......
你的tableview分配了吗?
它在 IB 中连接。当调用我的 prepareView 方法时,表存在,即不是 nil,所以我没有看到需要再次分配它。还是我?【参考方案3】:
你是否在头文件中设置了属性以及
IBOutlet UITableView *contactsTV
?
如果您没有为您的 contactsTV 设置 setter 方法,那么您的 contactsTV 不会被您的对象保留。
尝试将您的代码替换为
//header file
UITableView *contactsTV;
@property(nonatomic, retain) IBOutlet UITableView *contactsTV;
//implementation file
@synthesize contactsTV;
【讨论】:
属性已设置/之前已正确设置。以上是关于UITableviewController 失去对 tableview 的引用的主要内容,如果未能解决你的问题,请参考以下文章
UITableViewController 不应该在解除其 ViewController 时失去价值
QLPreviewController 在其上显示模态视图控制器后失去联系
是否可以使用 xib 或情节提要对 UITableViewController 进行子类化?