UITableviewController 失去对 tableview 的引用
我已经为此工作了两天了,似乎无法掌握。我想我错过了一些非常基本的东西。
这就是我所拥有的:
UIViewController 作为应用程序根控制器。 有一个 ContainerView,它是 UIView 的子类,我将其添加到我的根控制器视图中。 其中我想要一个 UITableView。
由于有多个不同的容器,因此每个容器都有不同的 Nib。
其连接方式如下:带有内容的 Nib,将容器作为其文件的所有者。 UITableView 有一个出口,它有容器作为源和委托。
容器实现协议方法。
现在我无法在 UITableView 上调用 reloaddata,因为它为零。我在控制台中输入 po,它显示 0x0,但我不知道为什么。
我一直在尝试不同的方法,但最终都失去了对 tableView 的引用。
这不像是我创建的第一个表格视图,但我不知道我在这里做错了什么。
请帮忙!!!!
代码:
这是我的出口:
IBOutlet UITableView *contactsTV;
文件的所有者与其有连接,表视图反之亦然。
我通过以下方式创建笔尖:
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];
}
I have been working on this for 2 days now, cant seem to get a grasp. I'm missing something very basic I guess.
Here's what I have:
A UIViewController as the Apps root controller.
There's a ContainerView, a subclass of UIView which I add to my root controller view.
Within that I want a UITableView.
Since there are several different Containers, I have different Nibs for each.
Heres how its wired: Nib with content, has the container as its file's owner. There's an outlet to the UITableView, it has the container as source and delegate.
The container implements the protocol methods.
Now I can't call reloaddata on the UITableView since it's nil. I type po in the consolo and it says 0x0 but I don't know why.
I have been trying different approaches, but all ended up in losing the reference to the tableView.
It's not like it's my first tableview I create but I have no clue on what I'm doing wrong here.
Any HELP please!!!!
Code:
This is my Outlet:
IBOutlet UITableView *contactsTV;
File's owner has a connection to it, the tableview vice versa.
I create the nib by doing:
Contentview *v = [[Contentview alloc] initWithFrame:[[contentViewArray objectAtIndex:i] CGRectValue]];
while contentViewArray is some array storing Framevalues as strings.
Then I do:
[v prepareView];
and it looks like this:
- (void) prepareView {
NSArray *mediaPlayerViews = [[NSBundle mainBundle] loadNibNamed:@"MyView"
owner:self
options:nil];
UIView *v = (UIView *)[mediaPlayerViews objectAtIndex:0];
[self addSubview:v];
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
刚刚经历了类似的问题——一切似乎都正确连接(Xcode 4),但插座引用为零。
当我创建文件时,我使用了“新建文件”-> UITableViewController 的子类。使用NIB(自动)过程来设置文件。这导致控制器被声明为 UITableViewController 并且 NIB 将 UITableView 作为它的根。
尽管 TableDataSource 和 TableDelegate 方法按预期被调用,但加载 nib 时从未设置 TableView 的出口。
为了解决这个问题,我基本上必须将控制器从 UITableViewController 的子类更改为 UIViewController 并相应地设置 NIB:我清除了 NIB,添加了一个带有 UITableView 作为子类的 UIView,重新连接了出口(View、TableView、TableDataSource)和 TableDelegate),一切都按计划进行。
我认为当使用 NIB 创建 UITableView 的子类时,这可能是 XCode 的一个错误。
Just experienced a similar issue -- everything appeared wired up correctly (Xcode 4) but the outlet reference was nil.
When I created the file, I used the "New File" -> subclass of UITableViewController. with NIB (automatic) process to set up the file. This resulted in the controller being declared as a UITableViewController and the NIB had a UITableView as it's root.
Although the TableDataSource and TableDelegate methods got called as expected, the outlet for the TableView was never being set when the nib was loaded.
To fix this, I basically had to change the controller from being a subclass of UITableViewController to just UIViewController and set the NIB accordingly: I cleared the NIB, added a UIView with a UITableView as a child, reconnected the outlets (View, TableView, TableDataSource, and TableDelegate), and it all worked as planned.
I think this may be a bug with XCode, when creating a subclass of UITableView with NIB.
将其设置为 UITableViewController 应该可以工作。
Set it as a
UITableViewController
it should work.您是否在头文件中设置了属性
?
如果您的联系人电视没有设置方法,那么您的对象不会保留您的联系人电视。
尝试将您的代码替换为
Do you have property set in header file along with
?
If you don't have setter method for your contactsTV, then your contactsTV isn't retained by your object.
Try to replace your code with