Sélecteur non reconnu envoyé à l'instance lors de l'archivage des données (NSCoding)
-(void)transformObjects:(NSMutableArray*)array key:(NSString*)key
{
NSMutableArray* archiveArray = [[NSMutableArray alloc]initWithCapacity:array.count];
for (Furniture *furniture in array) {
//The error occurs on the line below
NSData *furnitureEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:furniture];
[archiveArray addObject:furnitureEncodedObject];
}
NSUserDefaults *userData = [NSUserDefaults standardUserDefaults];
[userData setObject:archiveArray forKey:key];
}
Journal des erreurs:
2014-03-04 10:55:27.881 AppName[10641:60b] -[Furniture encodeWithCoder:]: unrecognized selector sent to instance 0x15d43350
Je n'ai aucune idée de pourquoi suis-je "non reconnu sélecteur envoyé à l'instance" lorsque vous essayez d'archiver un objet.
source d'informationauteur SteBra
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour mettre en œuvre NSCoding protocole à l'intérieur de votre Mobilier de l'objet:
Fondamentalement, vous spécifier ce qui doit être écrit (codée) et de les lire à partir d'un fichier (décodé). Habituellement, pour chaque propriété que vous souhaitez stocker dans un fichier, vous faites de même, comme je l'ai fait ici dans un exemple.
Vous aurez besoin de mettre en œuvre
NSCoding
- voici un exemple avec un objet appeléSNStock
qui a deux propriétés de la chaîne,ticker
etname
:Vous avez une classe personnalisée
Furniture
laquelle vous essayez d'archive avecNSKeyedArchiver
. Pour que cela fonctionne, leFurniture
les besoins de la classe pour se conformer à la< NSCoding >
protocole. Ce qui signifie la mise en œuvre de laencodeWithCoder:
etinitWithCoder:
méthodes.Actuellement, vous ne mettez pas en œuvre ces méthodes. Vous avez besoin de les ajouter.
Je pense que votre Mobilier de classe n'implémente pas la NSCoding protocole.