2015-08-27 2 views
0

Я получаю nil UITableviewcell, проверьте мой код ниже.Получение nill UITableviewcell от индексного пути

int random = arc4random() % arr.count;          
    NSInteger index = [[arr objectAtIndex:random-1] integerValue]; 
    NSIndexPath *path = [NSIndexPath indexPathForRow:index inSection:0]; 
    SongListCell *cell2 = (SongListCell *)[table_view cellForRowAtIndexPath:path]; 
  • Получение Нилл клетки.

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

+0

Где вы размещали этот код? –

+0

Я создаю функцию и помещаю этот код внутрь. –

ответ

0

Метод cellForRowAtIndexPath: возвращает ноль, если ячейка не видна или индекс пути находится вне диапазона

+0

, если я пройду любое случайное число, подобное 5 в pathpath (NSIndexPath * path = [NSIndexPath indexPathForRow: 5 inSection: 0];) insted of index, чем я могу получить ячейку, но когда я пытаюсь использовать NSInteger или int Value, чем я получаю Нилл. Зачем? –

+0

Это означает, что ваша ячейка по индексу 5 видна и 'cellForRowAtIndexPath:' return cell, ячейка в случайном индексе может не отображаться, так что вы получаете нуль – LDNZh

0

Я не знаю точно, что вы пытаетесь достичь, но я думаю, что, может быть, вторая строка вашего кода не должны Не будь там. Это возможно? Не должно быть:

int random = arc4random() % arr.count;          
    NSIndexPath *path = [NSIndexPath indexPathForRow:random-1 inSection:0]; 
    SongListCell *cell2 = (SongListCell *)[table_view cellForRowAtIndexPath:path]; 

Потому что в противном случае, ваши в зависимости от значений внутри arr, а не только от количества объектов в arr, и эти значения могут содержать неверные индексы (или, возможно, даже не числовых из них).

Если это не так, можете ли вы привести пример значений от arr?

+0

Фактически у меня есть массив, содержащий 4 объекта, arr = [NSArray arraywithobjects: @ "3 »@ "4", @ "7", @ "9"]; И это индекс строки, поэтому я пытаюсь получить случайное значение из этого массива, и это значение будет indexpath для uitableview. если я получу 2 случайных числа, чем indexpathforrow будет 4. но все равно будет получать nil-ячейку. –

+0

Можете ли вы проверить, какое значение вы получаете за «индекс»? Действительно ли это допустимый номер строки? –

0

Вы должны создать ячейку самостоятельно, если она равна нулю, в качестве альтернативы в вашем viewDidLoad или, где это необходимо, вы можете вызвать один из этих методов, чтобы сделать представление таблицы созданием ячеек для вас.

[self.tableView registerClass:<#(__unsafe_unretained Class)#> forCellReuseIdentifier:<#(NSString *)#>] 
[self.tableView registerNib:<#(UINib *)#> forCellReuseIdentifier:<#(NSString *)#>]