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 进行子类化?

UITableViewController 自动推送 UIViewController?

UITableViewController 被释放

无法让 UITableViewController 动态填充