オブジェクトへの完全な「パス」を含む配列を作成できると思います。唯一のことは、おそらく NSNumber に何らかの方法でインデックスを保存する必要があることです。この場合、NSNumber オブジェクトを辞書のキーとして使用することはできません。次に、この特定の「パス」に必要なオブジェクトを返すメソッドを作成します。みたいな
NSMutableArray* basePath = [NSMutableArray arrayWithObjects: @"first", [NSNumber numberWithInt:index], nil];
id object = [self objectForPath:basePath inContainer:container];
- (id) objectForPath:(NSMutableArray*)basePath inContainer:(id)container
{
id result = nil;
id pathComponent = [basePath objectAtIndex: 0];
[basePath removeObjectAtIndex: 0];
// check if it is a number with int index
if( [pathComponent isKindOfClass:[NSNumber class]] )
{
result = [container objectAtIndex: [pathComponent intValue]];
}
else
{
result = [container objectForKey: pathComponent];
}
assert( result != nil );
// check if it is need to continue searching object
if( [basePath count] > 0 )
{
return [self objectForPath:basePath inContainer: result];
}
else
{
return result;
}
}
これは単なるアイデアですが、私の言いたいことを理解していただければ幸いです。そして、Kevin が上で述べたように、インデックスがない場合は、キーと値のコーディングを使用できます。