Проверить, содержит ли массив элемент по определенному индексу? - PullRequest
6 голосов
/ 03 сентября 2011
if (![[array objectAtIndex:indexPath.row] isEmpty]) {
   .... proceed as necessary                                 
}

indexPath.row может содержать любой тип объекта или он может быть пустым. Часто он пуст и, следовательно, он задыхается при попытке получить объект в указанном месте, когда он нулевой. Я пробовал вышеупомянутый подход, но это тоже не работает. Как правильно проверить этот сценарий?

Ответы [ 2 ]

18 голосов
/ 03 сентября 2011

Вы не должны вызывать objectAtIndex:, не зная, содержит ли массив объект по индексу.Вместо этого вы должны проверить,

if (indexPath.row < [array count])

И если вы используете array в качестве источника данных для tableView.Вы должны просто вернуть [array count] как количество строк,

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [array count];
}

И просто получить объект по адресу indexPath.row без проверки каких-либо условий.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    // Other code
    NSObject *obj = [array objectAtIndex:indexPath.row];
    // Proceed with obj
}
6 голосов
/ 03 сентября 2011

используйте метод [array count]:

if (indexPath.row < [array count])
{
   //The element Exists, you can write your code here
}

else 
{
   //No element exists at this index, you will receive index out of bounds exception and your application will crash if you ask for object at current indexPath.row.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...