iPhone - 数组计数的numberOfRowsInSection错误

时间:2011-03-02 09:15:02

标签: iphone objective-c nsarray nsdictionary nsinteger

如果@“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 个答案:

答案 0 :(得分:2)

在代码前加一个NSLog(@"Array: %@", self.items);,你会发现数组确实是空的。

答案 1 :(得分:1)

您正试图通过不存在的索引来获取对象。也许self.items数组没有每个节索引的对象。从错误消息看起来self.items实际上是空的(零对象)。

答案 2 :(得分:1)

也许您定义的部分太多(超过self.items中的项目数):

然后这会失败:

[self.items objectAtIndex:section]

答案 3 :(得分:1)

要解决此问题,您需要了解如何设置self.items以及如何实施- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

要么self.items提前释放数组,要么返回的部分数量与self.items无关。

答案 4 :(得分:0)

这是我的- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;的一个问题,因为在更改节标题时我只引用了Comments数组而不是其他两个。