Je pense que vous pouvez créer un tableau qui contiendra le "chemin" complet de votre objet. La seule chose, vous devez stocker vos index en quelque sorte, peut-être dans NSNumber, dans ce cas vous ne pouvez pas utiliser les objets NSNumber comme clés dans vos dictionnaires. Ensuite, créez une méthode qui retournera l'objet nécessaire pour ce "chemin" donné. smth like
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;
}
}
Ceci est juste une idée, mais j'espère que vous comprenez ce que je veux dire. Et comme Kevin l'a mentionné plus haut, si vous n'avez pas d'index, vous pouvez utiliser le codage de valeurs-clés.
Si vous utilisez la bonne version de Xcode vous pouvez faire ceci: 'obj [@ "root"] [@ "key1"] [IDX] [@ "key2"] [idz]' - légèrement plus lisible (et rétrocompatible) mais pas vraiment le chemin à parcourir ... – hypercrypt
C'est très sympa! Semble ne pas fonctionner dans 4.3.2 !? – Gustav
Xcode 4.4 est votre ami. Developer Preview est disponible maintenant, la finale sera disponible ce mois-ci. – hypercrypt