我在我正在制作的一个新应用程序中使用 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 来解决这个问题,但我仍然不明白这有什么不同。