2

我在我正在制作的一个新应用程序中使用 Storyboard,并且在我的大多数视图控制器中都有一个表格视图,它们的设置几乎彼此相同;使用原型单元格,唯一的单元格标识符,所有 UI 方面都几乎相同。代表和数据源都正确连接。该应用程序在 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它之前的行,上面的工作正常。

所以看来问题一定出在故事板中,但是当我将它与工作正常的视图控制器进行比较时,我看不出有什么问题。

更新:

发布此问题后,我删除了一个有问题的视图控制器并从头开始重新添加。在这样做时,我找到了问题的根本原因 - 将视图连接到单元格以获取selectedBackgroundView. 这个确切的视图在我的应用程序的其他表中使用得很好,但是在这个特定的表上它会导致如上所述的崩溃,我完全不知道为什么。无论如何,我没有任何代码可以修改它。它只是连接在笔尖中,仅此而已...

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

4

1 回答 1

3

你说你在别处用过这个。如果您从其他单元复制了 GUI 元素,那么您可能忘记删除复制的出口连接器。通过一一选择元素进行检查,并检查 Connections Inspector 中显示的内容。

于 2013-08-05T18:12:50.280 回答