使用Storyboard(iOS5)的dequeueReusableCellWithIdentifier上的UITableView错误访问崩溃

时间:2013-07-17 14:38:59

标签: ios objective-c uitableview storyboard

我在我正在制作的新应用程序中使用Storyboard,并且在我的大多数viewcontrollers中都有一个tableview,它们的设置几乎完全相同;使用原型单元,一个独特的单元标识符,所有UI方面都非常相似。 Delegate和dataSource都已正确连接。该应用程序在iOS6和最新的iOS7测试版上运行完美,问题是2个视图控制器在iOS5下崩溃。

调用dequeueReusableCellWithIdentifier时,在以下委托方法中发生崩溃(访问不良)。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"MoreCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    // Configure the cell...

    // Rest of code snipped ...

}

错误消息从以下任何内容变为以下任何一种:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[_UITableViewReorderingSupport removeFromSuperview]: unrecognized selector sent to instance 0x2a3e20'

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[CALayer removeFromSuperview]: unrecognized selector sent to instance 0x2b9f90'

还有第三个错误涉及NSInvocation removeFromSuperview,但我不再得到这个错误。

我在故事板中的笔尖中看不到任何明显的问题。正如我之前所说,它们的配置几乎完全相同,因此仅在某些视图控制器上发生此崩溃是没有意义的。我也没有自动布局,所以这不是问题。

如果我以老式的方式创建单元格(故事前板),它可以正常工作。但我不想这样做,我不应该像使用故事板那样失败......

if (cell==nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
    cell.textLabel.textColor = [UIColor colorWithRed:(100/255.0f) green:(150/255.0f) blue:(50/255.0f) alpha:1.0];
    cell.textLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:17.0];
    cell.detailTextLabel.textColor = [UIColor colorWithRed:(85/255.0f) green:(85/255.0f) blue:(85/255.0f) alpha:1.0];
    cell.detailTextLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:15.0];
}

如果我在它前面注明dequeueReusableCellWithIdentifier行,上述工作正常。

所以看起来这个问题必须在故事板中,但是当我将它与运行良好的viewcontrollers进行比较时,我看不出它有什么问题。

更新

发布此问题后,我删除了一个有问题的viewcontrollers,并从头开始再次添加。在这样做的过程中,我找到了问题的根本原因 - 将视图连接到其selectedBackgroundView的单元格。这个确切的视图正在我的应用程序中的其他表中使用就好了,但在这个特定的一个上它导致如上所述的崩溃,我完全不知道为什么。我还没有任何修改它的代码。它刚刚连接在笔尖上,就是它......

我可以通过在代码中创建selectedBackgroundView来解决这个问题,但我仍然不明白这与此有什么不同。

1 个答案:

答案 0 :(得分:3)

你说你在别处使用过它。如果您从其他单元格中复制 GUI元素,则可能忘记删除复制的插座连接器。通过逐个选择元素进行检查,并检查Connections Inspector中显示的内容。