2011-09-22 68 views
2

我从苹果引导了以下内容:静态内容 - 与苹果引导的问题

http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/TableView_iPhone/TableViewCells/TableViewCells.html#//apple_ref/doc/uid/TP40007451-CH7

有关:技术静态行内容。

我的问题是这样的:

我所有的细胞都nil

根据Apple的说法,视图的加载应该实例化所有填充该nib文件的对象,只有实例化tableview的位。因此,当它返回一个空单元格时,单元格为零,并在方法cellForRowAtIndexPath:中崩溃程序。

我已经按照字母指南搜索了所有内容,没有找到任何解决方案,除了为每个单元创建一个笔尖并在需要时加载这些笔尖,但该解决方案比Apple解决方案要少得多。

任何帮助,将不胜感激。

+0

请注意,从ios5 /故事板开始,您可以在故事板中就地定义静态内容,而不是使用您链接到的技术。 – jrturton

回答

0

您可能没有将单元格的IBOutlet绑定到单元格本身。如果你的单元ivars是nil,那么你没有连线。

EDIT

如果IBOutlets连接,但实例变量是零,则该IBOutlets没有连接。还有其他可能性,但这是最常见的。其他可能性:您正尝试访问viewDidLoad之前。特别是,您在initWithFrame:期间无法访问您的ivars。其他可能性是你在某个时候覆盖了它们。检查他们的值在viewDidLoad。其他可能性是您加载了错误的nib文件,或者根本没有加载nib文件。所有的可能性,但我首先检查在viewDidLoad的一切,并仔细检查你的连接。

+0

IOButlet通过从文件所有者拖动到单元格连接到单元格。 这也是为什么我不知道为什么他们没有实例化的原因。 文件的所有者是具有与单元相关的ivars的TableViewController类。 – Thomas

+0

谢谢你的时间Rob .. 我测试了你建议的东西,结果如下: IBOutlets已连接:请参阅File's Owner的连接图像[File's Owner connections](http://dl.dropbox。 COM/U/2250562/connections.png)。 ivars在viewDidLoad中无效。 ivars在: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath。 我相信这个笔尖是加载的,因为文件的所有者是控制该笔尖的TableViewController,而tableView不是零。我通过调试进行了检查。 – Thomas

+0

ViewDidLoad不包含除[Super viewDidLoad]之外的其他任何内容,但也应该是可以的,因为实例化是通过加载nib文件完成的。 – Thomas

0

当实例化你的表视图控制器,你init方法,你应该调用父类([UIViewController initWithNibName:bundle:])的重载指定初始化,传递笔尖名称:

- (id)init { 
    return [self initWithNibName:NSStringFromClass([self class]) bundle:[NSBundle mainBundle]]; 
    } 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 

    if (self) { 
     // Custom initialization here 
    } 
    return self; 
} 

有关详细信息,请参阅本答案: Automatically Loading XIB for UITableViewController