Инкрементные значения NSIndexPath - PullRequest
3 голосов
/ 26 августа 2009

Я пытаюсь заполнить OutlineView содержимым файла XML.

Я бы хотел создать и управлять значениями внутри NSIndexPath, пока какао анализирует документ. NSIndexPath имеет методы для добавления и удаления индексов, но мне нужно увеличивать / уменьшать значения каждого индекса:

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

и так далее ...

как я могу это сделать?

Ответы [ 2 ]

5 голосов
/ 26 августа 2009

NSIndexPath не является изменяемым, поэтому вам придется каждый раз создавать новый путь индекса. Вероятно, наиболее эффективным способом было бы использовать сообщения length, getIndexes: и initWithIndexes:length:, а также функцию realloc для увеличения / уменьшения буфера.

Не забудьте release старый путь индекса после получения его индексов в буфере и до alloc king и init ввода (WithIndexes:length:) нового и free буфера при все готово (Также не забывайте, что realloc освобождает для вас старый буфер, поэтому вам нужно только free последний буфер.)

0 голосов
/ 13 апреля 2011

Я с @LolaRun - мы дети из Какао, мы не хотим перераспределения. Итак, попробуйте что-то вроде этого:

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 (первая строка создает indexPath с массивом newIndexes из приведенного выше примера):

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, а во втором - братья и сестры. Смешайте и сравните, как вам нравится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...