2011-10-01 4 views
6

Je ne peux pas enregistrer l'image en utilisant NSUserDefaults et Crash mon application et j'ai aussi utilisé classe personnalisée UserInfo qui a utiliséiPhone: Comment puis-je stocker UIImage en utilisant NSUserDefaults?

-(void)encodeWithCoder:(NSCoder *)encoder 
{ 
    NSData *imageData = UIImagePNGRepresentation(categoryImage); 
    [encoder encodeObject:categoryName forKey:@"name"]; 
    [encoder encodeObject:imageData forKey:@"image"]; 
} 

- (id) initWithCoder: décodeur (NSCoder *) et userInfo.categoryImage est variable de UIImage.

raison: '- [UIImage encodeWithCoder:]: sélecteur non reconnu envoyé à l'instance 0x7676a70'

userInfo = [[UserInfo alloc] init]; 

userInfo.categoryName = categoryName.text; 
NSLog(@"Category Name:--->%@",userInfo.categoryName); 

userInfo.categoryImage = image; 

appDelegate.categoryData = [[NSMutableDictionary dictionaryWithObjectsAndKeys: 
           userInfo.categoryName, @"name",userInfo.categoryImage,@"image", nil] mutableCopy]; 


[appDelegate.categories addObject:appDelegate.categoryData]; 
NSLog(@"Category Data:--->%@",appDelegate.categories); 

[appDelegate.categories addObject:userInfo.categoryName]; 
[appDelegate.categories addObject:userInfo.categoryImage]; 

[self saveCustomObject:userInfo.categoryName]; 

[self saveCustomObject:userInfo.categoryImage]; 


-(void)saveCustomObject:(UserInfo *)obj 
{ 
    appDelegate.userDefaults = [NSUserDefaults standardUserDefaults]; 
    NSData *myEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:obj]; 


    [appDelegate.userDefaults setObject:myEncodedObject forKey:@"myEncodedObjectKey"]; 
} 

Alors S'il vous plaît aidez-moi comment puis-je stocker et récupérer UIImage en utilisant nsusedefaults ???

+0

saveCustomObject ne peut guère fonctionner, car il stocke chaque objet donné pour la même clé. – Davyd

Répondre

21

de UIImage n'implémente pas le protocole NSCoding, c'est pourquoi vous avez l'erreur.

magasin:

NSData* imageData = UIImagePNGRepresentation(image); 
NSData* myEncodedImageData = [NSKeyedArchiver archivedDataWithRootObject:imageData]; 
[appDelegate.userDefaults setObject:myEncodedImageData forKey:@"myEncodedImageDataKey"]; 
} 

Restauration:

NSData* myEncodedImageData = [appDelegate.userDefaults objectForKey:@"myEncodedImageDataKey"]; 
UIImage* image = [UIImage imageWithData:myEncodedImageData]; 
+0

Comment puis-je utiliser stocker dans mon code ci-dessus s'il vous plaît aider –

+0

Rendre la classe 'UserInfo' implémenter le protocole 'NSCoding' et archiver l'ensemble de l'objet 'userInfo'. Lire ce post de plus d'infos: http://stackoverflow.com/questions/3715038/how-to-store-a-nsuinteger-using-nscoding par exemple. – Davyd

+0

Je suis également utilisé NSCoding mais aussi l'application est crash –

34

Si je vous, je vais sauver le UIImage dans un fichier (utilisez le [hachage myImage], pour générer un nom de fichier), et enregistrer le nom de fichier comme NSString en utilisant

de NSUserDefault
+9

Pour l'amour du ciel, veuillez accepter ceci comme réponse. Enregistrer un UIImage sur NSUserDefaults est vraiment une idée stupide. – Mugunth

10

Enregistrer l'image sur NSUserDefaults:

 [[NSUserDefaults standardUserDefaults] setObject:UIImagePNGRepresentation(image) forKey:@"image"]; 

image récupérer sur NSUserDefaults:

NSData* imageData = [[NSUserDefaults standardUserDefaults] objectForKey:@"image"]; 
    UIImage* image = [UIImage imageWithData:imageData];