ドラッグ アンド ドロップでテーブルを並べ替えるときの典型的なコード スニペットを次に示します。
- (BOOL)tableView:(NSTableView *)tv writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard *)pboard {
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:rowIndexes];
[pboard declareTypes:[NSArray arrayWithObject:MyDataType] owner:self];
[pboard setData:data forType:MyDataType];
sourceIndex = [rowIndexes firstIndex];
return YES;
}
ラインを見てください
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:rowIndexes];
どのようにしてrowIndexesをルートオブジェクトにすることができますか?
ドキュメントによると、NSIndexSet クラスは一意の符号なし整数の不変のコレクションを表します..コードでインデックス セットを使用して、インデックスを他のデータ構造に格納します。たとえば、NSArray オブジェクトが与えられた場合、インデックス セットを使用して、その配列内のオブジェクトのサブセットを識別できます。
NSIndexSet は単なる「一意の符号なし整数の不変コレクション」ではなく、オブジェクトを識別する一連のポインターでもあるようです。非常に紛らわしいのですが、何が起こっているのか説明できる人はいますか?