UITableViewCell indexPathForCell:在iOS 7上崩溃的应用程序

时间:2013-06-28 21:27:14

标签: ios objective-c uitableview ios7

在我的UITableView上的tableView:cellForRowAtIndexPath方法中,我有以下代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
//    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    NSLog(@"Ok");
    UITableViewCell *cell = [UITableViewCell configureFlatCellWithColor:[UIColor carrotColor] selectedColor:[UIColor sunflowerColor] style:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

    NSArray *listaDeEncuestas = [defaults objectForKey:@"encuestas"];
    NSDictionary *dict = [listaDeEncuestas objectAtIndex:indexPath.row];

    cell.cornerRadius = 5.0f;
    cell.separatorHeight = 0.0f;

    cell.textLabel.font = [UIFont boldFlatFontOfSize:17];
    cell.textLabel.textColor = [UIColor cloudsColor];

    cell.textLabel.text = [dict valueForKey:@"encuesta"];
    return cell;
}

执行此行时,应用程序在模拟器中崩溃:

UITableViewCell *cell = [UITableViewCell configureFlatCellWithColor:[UIColor carrotColor] selectedColor:[UIColor sunflowerColor] style:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

这是de Log输出:

2013-06-28 16:02:49.702 Encuestas[5447:a0b] -[UITableViewCell indexPathForCell:]: unrecognized selector sent to instance 0xad77ca0
2013-06-28 16:05:18.311 Encuestas[5447:3c0b] CFNetwork SSLHandshake failed (-9806)
2013-06-28 16:05:20.171 Encuestas[5447:a0b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewCell indexPathForCell:]: unrecognized selector sent to instance 0xad77ca0'
*** First throw call stack:
(0x21449b8 0x1ec58b6 0x21e0c13 0x2134cfb 0x21348de 0x13a98 0x115553a 0x1ed781f 0x4c2974 0x4b67ee 0x4c28bf 0x12032b2 0x1130062 0x112ec52 0x112eb24 0x112ebac 0x112dc6f 0x112dbd1 0x112e91b 0x1131e42 0x11f6442 0x11281b9 0x1128334 0x112859e 0x1132697 0x10e8824 0x10e9b5e 0x10ffa6c 0x10fffd9 0x10eb7d5 0x25f5906 0x25f5411 0x20c03e5 0x20c011b 0x20eab30 0x20ea10d 0x20e9f3b 0x10e92b1 0x10eb4eb 0xd07d 0x2d5d725)
libc++abi.dylib: terminating with uncaught exception of type NSException

代码在iOS 6中运行得很好,所以我想知道,为什么这会在iOS 7上崩溃?我在文档中遗漏了什么吗?

4 个答案:

答案 0 :(得分:2)

我不能说任何关于iOS 7的内容,因为NDA和所有内容,但如果您查看FUICellBackgroundView类,您会在第30行注意到以下内容,然后调用indexPathForCell: ,这是您的应用程序崩溃的地方:

UITableView* tableView = (UITableView*)self.superview.superview;
NSIndexPath* indexPath = [tableView indexPathForCell:(UITableViewCell*)self.superview];

来源:https://github.com/Grouper/FlatUIKit/blob/52a283435801e4fd45d9d6835743d7b0caa40db5/Classes/ios/FUICellBackgroundView.m#L30

现在出现的问题是,UITableViewUITableViewCell的{​​{1}}视图层次结构无法保证,而FlatUIKit似乎正在对此进行假设这不是真的。最简单的修复可能会添加一个检查,返回的视图是UITableView,如果没有,只需走向层次结构,直到你在窗口或外壳表视图(在第一种情况下,抛出异常) )。

分叉它,添加支票,提交拉取请求,并对您当天为开源做某事感到高兴:)

答案 1 :(得分:0)

configureFlatCellWithColor中的iOS 7“UITableViewCell”中没有此类方法,您应该使用以下实现

static NSString *CellIdentifier = @"TableViewCell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]

if (cell == nil) 
{

    cell = [[UITableViewCell alloc] initWithStyle:UITableViewStylePlain reuseIdentifier:CellIdentifier];
}

答案 2 :(得分:0)

即使您使用的是FlatUIKit,实施也没有任何问题。问题出现在下面的代码行中,CFNetwork SSLHandshake是框架内部的,它发生在您尝试连接到SSL服务器但握手失败时。您是通过网络获取某些数据以将其呈现给tableview吗?如果你是,那么你需要看看你是否从服务器端收到了什么。

答案 3 :(得分:0)

这应该可以解决问题。

if ([[[UIDevice currentDevice] systemVersion] floatValue] == 7.0)
{
    tableView = (UITableView *)cell.superview.superview.superview;

}
else
{
     tableView = (UITableView *)cell.superview;
}