我正在尝试使用XML文件的内容填充OutlineView。
当cocoa解析文档时,我想创建和管理NSIndexPath中的值。 NSIndexPath具有添加和删除索引的方法,但我需要增加/减少每个索引中的值:
[0,0]
[0,1]
[0,2]
依旧......
我该怎么做?
答案 0 :(得分:5)
NSIndexPath不可变,因此您每次都必须创建一个新的索引路径。可能最有效的方法是使用length
,getIndexes:
和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的子项,而第二个示例将创建兄弟项。根据需要混合'匹配。