2011-10-01 8 views
6

No puedo guardar la imagen utilizando NSUserDefaults y Crash mi aplicación y me clase personalizada también se utiliza información del usuario que se usaiPhone: ¿Cómo puedo almacenar UIImage usando NSUserDefaults?

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

- (id) initWithCoder: (NSCoder *) decodificador y userInfo.categoryImage es variable UIImage.

razón: '- [UIImage encodeWithCoder:]: Selector no reconocido enviado a la instancia 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"]; 
} 

Así que por favor me ayude cómo puedo almacenar y recuperar UIImage usando nsusedefaults ???

+0

SaveCustomObject apenas puede funcionar, porque almacena cada objeto dado para la misma clave. – Davyd

Respuesta

21

UIImage no implementa el protocolo NSCoding, esta es la razón por la que tiene el error.

tienda:

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

Restaurar:

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

¿Cómo puedo usar la tienda en mi código anterior? Por favor, ayuda –

+0

Haz que la clase 'UserInfo' implemente el protocolo 'NSCoding' y archive todo el objeto 'userInfo'. Lea esta publicación para obtener más información: http://stackoverflow.com/questions/3715038/how-to-store-a-nsuinteger-using-nscoding, por ejemplo. – Davyd

+0

También estoy utilizando NSCoding pero también la aplicación es crash –

34

Si yo fuera usted, voy a guardar el UIImage en un archivo (use el [hash de myImage]; para generar un nombre de archivo) y guarde el nombre de archivo que NSString usando NSUserDefault ;-)

+9

Por el amor de Dios, acepte esto como la respuesta. Guardar un UIImage en NSUserDefaults es realmente una idea tonta. – Mugunth

10

para guardar la imagen en NSUserDefaults:

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

Imagen recuperar el NSUserDefaults:

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