iPhone - ошибка numberOfRowsInSection с подсчетом массива - PullRequest
3 голосов
/ 02 марта 2011

Я получаю следующую ошибку, если массив @ «Comments» равен 0, а два других - 1 или больше.

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSMutableArray objectAtIndex:]: index 0 beyond bounds for empty array'

Это заполнение массива self.items.

Как я могу объяснить тот факт, что некоторые из self.notification (в данном случае комментариев) могут быть нулевыми и при этом мой код запускается без выдачи такого типа ошибки?

NSDictionary *commentsDict = [NSDictionary dictionaryWithObject:self.notification.Comments forKey:@"Comments"];
NSDictionary *likesDict = [NSDictionary dictionaryWithObject:self.notification.Likes forKey:@"Likes"];
NSDictionary *friendsDict = [NSDictionary dictionaryWithObject:self.notification.Likes forKey:@"Friends"];

self.items = [NSMutableArray array];

[self.items addObject:commentsDict];
[self.items addObject:likesDict];
[self.items addObject:friendsDict];

Этокод, где он терпит неудачу:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    NSDictionary *dictionary = [self.items objectAtIndex:section];
    NSArray *array = nil;

    if (section == 0) {
        array = [dictionary objectForKey:@"Comments"]; // 0 count
    } else if (section == 1) {
        array = [dictionary objectForKey:@"Likes"]; // 1 count or greater
    } else {
        array = [dictionary objectForKey:@"Friends"]; // 1 count or greater
    }

    return [array count];
}

Ответы [ 5 ]

2 голосов
/ 02 марта 2011

поставьте NSLog(@"Array: %@", self.items); перед вашим кодом, и вы увидите, что массив действительно пуст.

1 голос
/ 02 марта 2011

Чтобы решить эту проблему, вам нужно посмотреть, как вы установили self.items и как вы реализовали - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView.

Либо self.items освобождает массив раньше или как вы возвращаетеколичество секций не зависит от self.items.

1 голос
/ 02 марта 2011

Возможно, у вас определено слишком много разделов (больше, чем количество элементов в self.items):

Тогда произойдет сбой:

[self.items objectAtIndex:section]
1 голос
/ 02 марта 2011

Вы пытаетесь получить объект по индексу, которого там нет. Возможно, массив self.items не имеет объекта для каждого индекса раздела. Из сообщения об ошибке похоже, что self.items фактически пусто (ноль объектов).

0 голосов
/ 06 марта 2011

Это была проблема с моим - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;, так как я только ссылался на массив Comments вместо двух других при изменении заголовка раздела.

...