0

在我的 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 日志输出:

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

4 回答 4

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它所包含的,并且看起来好像FlatUIKit是在对它做出不正确的假设。最简单的修复可能会添加一个检查返回的视图是否是 a UITableView,如果不是,则简单地沿着层次结构向上走,直到您位于窗口或房屋表视图(在第一种情况下,抛出异常)。

分叉,添加支票,提交拉取请求,很高兴你那天为开源做了一些事情:)

于 2013-06-30T19:53:14.587 回答
0

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

于 2013-06-30T19:23:05.337 回答
0

configureFlatCellWithColoriOS 7“ ”中没有这样的方法,UITableViewCell您应该使用以下实现

static NSString *CellIdentifier = @"TableViewCell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]

if (cell == nil) 
{

    cell = [[UITableViewCell alloc] initWithStyle:UITableViewStylePlain reuseIdentifier:CellIdentifier];
}
于 2013-06-28T21:58:37.787 回答
0

这应该可以解决问题。

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

}
else
{
     tableView = (UITableView *)cell.superview;
}
于 2014-03-07T06:17:29.733 回答