2013-06-28 5 views
0

В моей Tableview: метод cellForRowAtIndexPath на моем UITableView, у меня есть этот код:UITableViewCell indexPathForCell: сбой приложения на прошивкой 7

- (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]; 

Это де выход Вход:

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, так что я был wonderi ng, почему это сбой на iOS 7? Есть ли что-то, что мне не хватает в документации?

+9

По вопросам, касающимся iOS7, которые все еще находятся под NDA, посетите форумы разработчиков Apple. Но у вас есть полезное сообщение об ошибке, в котором вам точно сказано, что случилось. UITableViewCell никогда не отвечал на селектор indexPathForCell. Это метод UITableView. – geraldWilliam

+0

@geraldWilliam Спасибо! –

ответ

0

Там нет такого метода прошивки 7 «configureFlatCellWithColor» в UITableViewCell вместо этого вы должны использовать следующую реализацию

static NSString *CellIdentifier = @"TableViewCell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier] 

if (cell == nil) 
{ 

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

Я использую FlatUIKit, вот откуда этот метод. –

0

Там нет ничего плохого в реализации, даже если вы используете FlatUIKit. Проблема возникла в следующей строке кода, CFNetwork SSLHandshake, которая является внутренней для фреймворка, и это произошло, когда вы пытаетесь подключиться к серверу SSL, но рукопожатие не удалось. Вы извлекаете некоторые данные по сети, чтобы отобразить их в таблице? Если да, то вам нужно посмотреть, получаете ли вы что-то с сервера или нет.

+0

-1 Пожалуйста, внимательно прочитайте сообщение об ошибке. Особенно тот, который упоминает исключение, которое было брошено, которое прекратило приложение. – JustSid

+0

Да, но если что-то не так происходит внутри cellForRowAtIndexPath, оно выдает исключение в [UITableViewCell indexPathForCell], пожалуйста, подтвердите его, а затем, пожалуйста, проголосуйте. Я подтвердил это, кроме того, пожалуйста, ознакомьтесь с реализацией FlatUIKit. – ldindu

+0

@Idindu Извините, не собираюсь удалять нижний план. Подтверждение SSL не прошло почти две секунды до того, как выбрано исключение, очень маловероятно, что путь кода от неудачного SSL-подтверждения прекратился в случае исключения.Кроме того, если вы посмотрите на метод, вы заметите, что в нем нет сетевого кода. – JustSid

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

Теперь возникает проблема, что нет никакой гарантии по иерархии зрения UITableView и UITableViewCell «s это дома, и это выглядит как FlatUIKit делает предположение об этом это неправда. Самое простое исправление, вероятно, добавило бы проверку, чтобы возвращаемое представление было UITableView, а если нет, просто поднимитесь по иерархии до тех пор, пока вы не окажетесь либо в окне, либо в виде таблицы жилья (в первом случае выбросьте исключение).

Вилка это, добавьте чек, отправьте запрос тянуть и быть счастливы, что вы сделали что-то для открытого источника в тот день :)

0

Это должно решить проблему.

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

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