J'ai une classe qui contient plusieurs objets utilisateur et en tant que tel a un tableau d'entre eux comme une variable d'instance:propriété @dynamic a besoin setter avec plusieurs comportements
NSMutableArray *users;
La partie la plus délicate est l'activation. Je désérialise ces objets à partir d'un serveur via Objective Resource, et pour des raisons backend, les utilisateurs ne peuvent être renvoyés que sous la forme d'une longue chaîne d'UID - ce que j'ai localement est un dictionnaire séparé d'utilisateurs avec UID. Compte tenu de la chaîne uidString séparés par des virgules UIDs-je remplacer le dispositif de réglage par défaut et remplir les objets réels des utilisateurs:
@dynamic users;
- (void)setUsers:(id)uidString {
users = [NSMutableArray arrayWithArray:
[[User allUsersDictionary] objectsForKeys:[(NSString*)uidString componentsSeparatedByString:@","]]];
}
Le problème est le suivant: Je sérialiser maintenant ces à la base de données en utilisant SQLitePO, qui stocke ces derniers comme le tableau de objets utilisateur, pas la chaîne d'origine. Donc, quand je le récupère de la base de données, le setter traite ce tableau d'objets utilisateur comme une chaîne! Où je veux réellement ajuster le comportement du setter quand il obtient cet objet de DB par rapport au réseau.
Je ne peux pas simplement rendre le getter sérialisable dans une chaîne sans déchirer un grand code qui référence ce tableau d'objets utilisateur, et j'ai essayé de détecter dans le setter si j'ai une chaîne ou un tableau entrant:
if ([uidString respondsToSelector:@selector(addObject)]) {
// Already an array, so don't do anything - just assign users = uidString
mais pas de succès ... donc je suis coincé - des suggestions? Merci d'avance!
Merci Pawel - cela fonctionne maintenant en utilisant votre deuxième suggestion. Pour votre deuxième suggestion, j'ai d'abord essayé (en noob) si ([classe uidString] == [classe NSString]) ne réalisant pas "isKindOfClass" est la bonne façon – ambertch