我正在尝试使用XML文件的内容填充OutlineView。
我想在cocoa解析文档时创建和管理NSIndexPath中的值。NSIndexPath具有添加和删除索引的方法,但我需要递增/递减每个索引中的值:
0,0
0,1
0,2
以此类推。
我该怎么做呢?
发布于 2009-08-26 00:17:52
NSIndexPath不是可变的,所以每次都必须创建一个新的索引路径。最有效的方法可能是使用length、getIndexes:和initWithIndexes:length:消息,再加上realloc函数来增大/缩小缓冲区。
不要忘记在将索引放入缓冲区之后,在allocking和init (WithIndexes:length:)新路径之前对旧的索引路径执行release操作,并在完成时对缓冲区执行free操作。(也不要忘记,realloc会为您释放旧的缓冲区,因此您只需要free最后一个缓冲区。)
发布于 2011-04-13 23:32:00
我支持@LolaRun --我们是可可宝贝,我们不想要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的子节点,而第二个示例将创建兄弟节点。按你的喜好搭配。
https://stackoverflow.com/questions/1331659
复制相似问题