2010-09-17 5 views
3

Je dois détecter les modifications dans l'objet NSArray - c'est-à-dire si un objet a été ajouté/supprimé de/à partir de NSArray ou a été simplement modifié sur place. Existe-t-il des fonctions de hachage NSArray intégrées pour cette tâche - ou dois-je écrire ma propre fonction de hachage pour NSArray? Peut-être que quelqu'un a une solution différente? Des idées ?Détecter les modifications dans NSArray dans ObjC

Répondre

2

Vous pouvez utiliser un NSArrayController, qui est conforme à Key-Value-Observing. Malheureusement, NSArray est seulement conforme à la norme KVC. De cette façon, vous pouvez facilement surveiller la propriété arrangedObjects du contrôleur RAID. Cela devrait résoudre votre problème.

Aussi, voir cette question: Key-Value-Observing a to-many relationship in Cocoa

+5

Cela ne vous dira pas si un objet est muté dans le tableau, cependant. Vous devez observer chaque élément du tableau. – Chuck

5

Tous les objets ont une méthode -hash mais pas tous les objets ont une bonne mise en œuvre.

la documentation NSArray ne définit pas est fait, mais le test révèle retourne la longueur du tableau - pas très utile:

NSLog(@"%lu", @[@"foo"].hash);    // output: 1 
NSLog(@"%lu", @[@"foo", @"bar"].hash);  // output: 2 
NSLog(@"%lu", @[@"hello", @"world"].hash); // output: 2 

Si les performances ne sont pas critiques, et si le tableau contient <NSCoding> objets puis vous pouvez simplement serialise le tableau à NSData qui a une bonne mise en œuvre -hash:

[NSArchiver archivedDataWithRootObject:@[@"foo"]].hash    // 194519622 
[NSArchiver archivedDataWithRootObject:@[@"foo", @"bar"]].hash  // 123459814 
[NSArchiver archivedDataWithRootObject:@[@"hello", @"world"]].hash // 215474591 

pour de meilleures performances, il devrait y avoir une réponse expliquant quelque part comment écrire votre propre -hash méthode. Fondamentalement appelez -hash sur chaque objet dans le tableau (en supposant que le tableau contient des objets qui peuvent être hachés de manière fiable) et combiner chaque ensemble mélangé avec quelques simples mathématiques aléatoires.

Questions connexes