2012-01-18 2 views
2

Я настраиваю свои ячейки таблицы. У меня есть этот код (упрощенный), который дает мне EXC_BAD_ACCESS при попытке получить доступ к [indexPath row]EXC_BAD_ACCESS в [indexPath row]

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    static NSString *CellIdentifier = @"WCFPictureCell"; 
    static NSString *CellNib = @"WCFPictureCell"; 
    WCFPictureCell *cell = (WCFPictureCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellNib owner:self options:nil]; 
     cell = (WCFPictureCell *)[nib objectAtIndex:0]; 
    } 
    NSLog(@"iph %@", indexPath); 
    NSLog(@"iphrow %@", [indexPath row]); 
    return cell; 
} 

Что я делаю неправильно?

Благодаря

ответ

10

Метод NSIndexPathrow возвращает NSInteger.
Это примитивный тип, а не объект.

Таким образом, вы не можете распечатать его, используя %@.

Что вы хотите:

NSLog(@"iphrow %i", [ indexPath row ]); 

Вы получаете ошибку сегментации, поскольку %@ используется для указателя на объект.
Когда вы передаете целое число, NSLog попытается напечатать объект по адресу памяти, указанному целым значением.

+0

В чем причина использования '% i'? Я всегда использовал '% d' для целого числа, и я знаю, что' NSInteger' - это просто typedef 'int', но есть ли причина использовать его, кроме предпочтения? –

+2

'% i' и'% d' - это то же самое с 'printf'. Оба используются для целых чисел со знаком. Это просто вопрос привычки. Но обратите внимание, что '% i' и'% d' имеют другое значение в 'scanf'. – Macmade

+0

Благодарим вас за информацию. +1 –

0

попробуйте этот код (немного Refactor). Ваша ошибка указана в [indexPath row], которая возвращает int use (% i not% @)

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    WCFPictureCell *cell = (WCFPictureCell *)[tableView dequeueReusableCellWithIdentifier:@"WCFPictureCell"]; 
    if (cell == nil) { 
     NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"WCFPictureCell" owner:self options:nil]; 
     cell = [topLevelObjects objectAtIndex:0]; 
    } 
NSLog(@"iph %@", indexPath); 
NSLog(@"iphrow %i", [indexPath row]); 
return cell; } 
Смежные вопросы