Éditer (2012/10/22): Reformuler cette question dans des termes, espérons-le, plus clairs. Essentiellement, ce que je cherche est un NSCoder qui peut (un) archiver entre plusieurs emplacements. Certaines des primitives d'objets codés doivent être enregistrés dans l'emplacement A tandis que d'autres doivent être enregistrés dans l'emplacement spécifié B, etc.Diviser les données pour NSKeyedArchiver et NSKeyedUnarchiver
Par exemple, supposons que nous avons une classe avec quelque chose comme ceci:
@interface SomeClass
{
NSString *ivar1;
NSString *ivar2;
NSString *ivar3;
SomeClass *ivarZ;
}
...
@end
Quelque part, nous ont une instance:
SomeClass *someObject;
Ce que je veux faire quelque chose comme ce qui suit sur l'enregistrement:
NSData *prefDat = [KeyedMultiArchiver archiveRootObject:someObject
withPartitionKey:@"DataForNSUserDefaults"];
NSData *permDat = [KeyedMultiArchiver archiveRootObject:someObject
withPartitionKey:@"DataForPermanentStorage"];
/* save prefDat to NSUserDefaults */;
/* save permDat to some appropriate NSURL */;
Et puis désarchivage:
SomeClass *anotherObject = [SomeClass new];
NSData *prefDat = /* get from NSUserDefaults */;
NSData *permDat = /* get from appropriate NSURL */;
[KeyedMultiUnarchiver unarchiveData:prefDat
intoObject:anotherObject
withPartitionKey:@"DataForNSUserDefaults"];
[KeyedMultiUnarchiver unarchiveData:permDat
intoObject:anotherObject
withPartitionKey:@"DataForPermanentStorage"];
Où ivar1
s pourraient être sauvés à NSUserDefaults
et ivar2
s, ivar3
s sur le disque quelque part.
Je vais probablement finir par coder ma propre solution pour cela, mais si vous venez avec des alternatives brillantes, faites-le moi savoir!
Va poster le produit final.
Je pense que vous devez fournir un peu plus de détails sur votre structure. Est-ce un dict de haut niveau avec des données mutables et des données immuables en dessous, ou les données mutables sont-elles dispersées autour de votre structure de données immuable? –
Il y a au moins 3 niveaux de profondeur. Chaque objet de chaque couche peut avoir une ou plusieurs des données immuables et mutables. Du point de vue global, il n'y a pas de division systématique entre les propriétés mutables et immuables; chaque classe de la hiérarchie décide pour elle-même. J'espère que la logique de sérialisation des données sera centralisée autant que possible - je préférerais garder les classes individuelles en train d'enregistrer et de charger leurs données individuelles ou quoi que ce soit de ce genre. – Ncat
Malheureusement, juste après avoir posté cette question, le projet a été temporairement arrêté, donc je n'ai pas pu le résoudre pour le moment. Cependant, une solution (désespérée) que je pensais était de réécrire le code de sérialisation pour utiliser les données de base à la place. J'espère vraiment éviter cela, donc toutes les suggestions sont très appréciées. – Ncat