如何指定每个部分的行数

时间:2012-08-20 04:19:53

标签: iphone ios uitableview

我有一个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];
}

当我尝试设置tableview的第一部分时,这是我所犯的错误。

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 ..我希望这是正确的做法。它只是我不断发现错误。

3 个答案:

答案 0 :(得分: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];
}

答案 1 :(得分:0)

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

除此之外一切都很好:)

快乐编码:)

答案 2 :(得分:0)

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