NSIndexPath递增值

时间:2009-08-26 00:04:24

标签: objective-c cocoa

我正在尝试使用XML文件的内容填充OutlineView。

当cocoa解析文档时,我想创建和管理NSIndexPath中的值。 NSIndexPath具有添加和删除索引的方法,但我需要增加/减少每个索引中的值:

[0,0]
[0,1]
[0,2]

依旧......

我该怎么做?

2 个答案:

答案 0 :(得分:5)

NSIndexPath不可变,因此您每次都必须创建一个新的索引路径。可能最有效的方法是使用lengthgetIndexes:initWithIndexes:length:消息,以及realloc函数来增大/缩小缓冲区。

在将索引放入缓冲区之后以及release king和alloc ing(init)新索引之前,不要忘记WithIndexes:length:旧索引路径,完成后到free缓冲区。 (另请不要忘记realloc为您释放旧缓冲区,因此您只需要free最后一个缓冲区。)

答案 1 :(得分:0)

我和@LolaRun在一起 - 我们是Cocoa婴儿,我们不希望没有realloc。所以,尝试这样的事情:

NSUInteger newIndexes[] = {0,1};
NSUInteger len = sizeof(newIndexes)/sizeof(NSUInteger); //sorry!
NSIndexPath *baseIndexPath = [NSIndexPath indexPathWithIndexes:newIndexes 
                                                        length:len];
NSUInteger i;
for (i=0; i<10; i++) {
    NSIndexPath *newIndexPath = [baseIndexPath indexPathByAddingIndex:i];
    NSLog(@"newIndexPath = %@", newIndexPath);
}

或者您可能希望增加现有的indexPath(第一行使用上面示例中的newIndexes数组实例化indexPath):

NSIndexPath *someIndexPath = [NSIndexPath indexPathWithIndexes:newIndexes 
                                                        length:len];
    NSUInteger newIndexes2[[someIndexPath length]];
    [someIndexPath getIndexes:newIndexes2];

    NSUInteger len2 = sizeof(newIndexes2)/sizeof(NSUInteger);
    NSIndexPath *baseIndexPath2 = [NSIndexPath indexPathWithIndexes:newIndexes2 
                                                             length:len2];
    NSUInteger ii;
    NSInteger start = [someIndexPath indexAtPosition:[someIndexPath length] -1];
    for (ii=start; ii<10; ii++) {
        NSIndexPath *newIndexPath2 = [baseIndexPath2 indexPathByAddingIndex:ii];
        NSLog(@"newIndexPath2 = %@", newIndexPath2);
    }

请注意,第一个示例将创建原始路径0.1的子项,而第二个示例将创建兄弟项。根据需要混合'匹配。