2009-08-26 23 views
3

XMLファイルの内容でアウトラインビューを作成しようとしています。NSIndexPathの値を増やす

NSIndexPathの中に値を作成して管理したいのですが、ココアはその文書を解析します。 NSIndexPathインデックスを追加および削除するためのメソッドを持っているが、私は、各インデックスの値をインクリメント/デクリメントする必要があります

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

など...

どうすればいいですか?

答えて

5

NSIndexPathは変更不可能なので、毎回新しいインデックスパスを作成する必要があります。おそらく最も効率的な方法は、length,getIndexes:、およびinitWithIndexes:length:メッセージと、バッファを拡張/縮小するためのrealloc関数を使用することです。

releaseに古いインデックスバッファにそのインデックスを取得した後とalloc王の前にパスとinit ING(WithIndexes:length:)新しいものを忘れてはいけない、とあなたが完了したら、バッファをfreeします。 (reallocは古いバッファを解放するので、最後のバッファはfreeにする必要があります)。

+0

他の方法はありませんか?なぜそれが管理できないのであれば、NSIndexPathでそんなにカウントするのですか? – LolaRun

+0

LolaRun:インデックスのC配列を維持できます。次に、必要に応じて配列からNSIndexPathを作成して、配列のインデックスを自由に変更できます。 Cocoa TouchのUITableViewsなど、NSIndexPathsを作成する理由がいくつかあります。 –

0

私は@LolaRunと一緒です。私たちはココアの赤ちゃんですrealloc。したがって、このような何かしてみてください:

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); 
    } 

なお:

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をインスタンス化)最初の例は元のパス0.1の子を作成し、2番目の子は兄弟を作成します。あなたが好きなようにミックスnのマッチ。