0

我有一个 NSDictionary 返回,我希望每个条目都有一行,但是我还希望在此部分上方有一个只有一个 etry 的部分,我正在尝试使用下面的代码执行此操作,但是当我去的时候我一直收到错误输入 if 语句。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // returns the number of rows per section based off each entry in letterDictionary
    NSString *currentLetter = [sectionLetterArray objectAtIndex:section];
    if (section == 1) {
        return 1;
    }
    else
    return [[letterDictionary objectForKey:currentLetter] count];
}

这是我尝试设置表格视图的第一部分时收到的错误。

2012-08-20 16:12:11.983 kPad[5681:907] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0]'
*** First throw call stack:
(0x3686756b 0x36b4797f 0x367a856d 0x56c11 0x3793f8b7 0x37940c19 0x37940b6d 0x3794075d 0x5826d 0x57dfb 0x5569b 0x55ee9 0x5fd65 0x32d8bead 0x373f3ccb 0x5f6a5 0x61c99 0x5f531 0x5ef6f 0x5b443 0x374105b5 0x37361991 0x373618ad 0x32ccaacf 0x32cca1bb 0x32cf2323 0x367ae2e1 0x32cf2783 0x32c56c65 0x36838143 0x368379a9 0x368366ef 0x367b4c1d 0x367b4aa9 0x3967833b 0x3791e535 0x4edd5 0x3557fb20)
libc++abi.dylib: terminate called throwing an exception

问题是可以有几个部分并且它是动态的..这就是我使用 if else 的原因..我希望这是正确的做法。它只是我不断收到错误。

4

3 回答 3

0

首先将 if 语句放入section == 0您的 if 语句并检查该numberOfSectionsInTableView:方法是否在此方法的语句中返回 2return?如果是这样,你可以有,section == 1否则它只有一个部分,它是== 0而不是== 1

否则这一切都很好:)

快乐编码:)

于 2012-08-20T05:34:56.680 回答
0

问题是 sectionLetterArray 没有索引 1,所以它崩溃了。您可以删除您的 else 语句(如果该部分为 1 则不会执行,因为您已经返回了某些内容),并将其替换为NSString *currentLetter = [sectionLetterArray objectAtIndex:section];

编辑:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // returns the number of rows per section based off each entry in letterDictionary

    if (section == 1) {
        return 1;
    }

    NSString *currentLetter = [sectionLetterArray objectAtIndex:section];
    return [[letterDictionary objectForKey:currentLetter] count];
}
于 2012-08-20T04:31:13.067 回答
0

只需检查您的数组中有多少项目sectionLetterArray以及您的行中有多少部分......

于 2012-08-20T05:44:15.937 回答