私はcocos2d-iphoneを使用してゲームを書いていますが、ステージは.plistファイルで定義されています。ただし、ファイルは大きくなっています。そのため、プロセスに構造を追加し、plistのほとんどを固定フィールドに分割するエディターを開発しました。ただし、一部の要素には引き続きplistエディタータイプの機能が必要なため、「その他のパラメーター」を表示するパネルにNSOutlineViewを実装しました。XCodeの「プロパティリストエディタ」から機能を複製しようとしています。
私は次のシステムを実装しました。http://www.stupendous.net/archives/2009/01/11/nsoutlineview-example/
これは私が必要としているものに非常に近いですが、私が今日のほとんどを解決しようとして費やしてきた問題があります。キー列の値は、親ディクショナリを検索して使用することにより、選択したアイテムから「逆方向」に計算されます。
return [[parentObject allKeysForObject:item] objectAtIndex:0];
ただし、ツリー内の特定のディクショナリ内に同じ値を持つ複数のアイテムがある場合、このステートメントは常にその値を持つ最初のアイテムを返します(isEqualToString:またはハッシュ値を使用して文字列を比較しているように見えます)。これにより、item1、item2、item3の代わりに'item1、item1、item1'を示すキー列が表示されます(項目1〜3はすべて値''を持ちます)。次に試しました。
-(NSString*)keyFromDictionary:(NSDictionary*)dict forItem:(id)item
{
for( uint i = 0; i < [[dict allKeys] count]; i++ ) {
id object = [dict objectForKey:[[dict allKeys] objectAtIndex:i]];
if ( &object == &item ) {
return [[dict allKeys] objectAtIndex:i];
}
}
return nil;
}
ただし、これは常にnilを返します。NSOutlineViewの経験が少し多い人が、より良いソリューションを提供できるかもしれないと期待していました。この問題はリンクされた例では1回しか発生しませんが、たとえば辞書からアイテムを削除する場合は、これを何度も使用する必要がありました。どんな助けでも大歓迎です。