2012-01-15 4 views
1

J'ai enregistré une image dans NSData avec UserDefaults et je veux maintenant qu'elle soit récupérée dans une cellule tableview.Essayer d'extraire l'image - obtention EXC_BAD_ACCESS Erreur

Voici ce que je mets dans le viewDidLoad du TableView.m

NSData *imageData; 
imageData = [NSKeyedArchiver archivedDataWithRootObject:yourUIImage]; 
[[NSUserDefaults standardUserDefaults] setObject:imageData forKey:@"image"]; 

Et voici ce que je mets dans le TableView cellforRowatIndex

cell.imageView.image = [UIImage imageWithData:@"bild"]; 
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 

Cependant quand je lance le programe je reçois un EXC_BAD_ACCESS Erreur sur la ligne cell.imageView.image avec un "type de pointeur incompatible envoyant" NSString * "au paramètre de type" NSData * ""

Voici comment J'enregistrer l'image en premier lieu:

if ([[NSUserDefaults standardUserDefaults] objectForKey:@"image"] == nil) { 
picker = [[UIImagePickerController alloc] init]; 
picker.delegate = self; 
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
[self presentModalViewController:picker animated:YES]; 

    NSData *imageData; 
    UIImage *yourUIImage; 
    imageData = [NSKeyedArchiver archivedDataWithRootObject:yourUIImage]; 
    [[NSUserDefaults standardUserDefaults] setObject:imageData forKey:@"image"]; 

Répondre

2

Utilisez NSKeyedUnarchiver en contrepartie de NSKeyedArchiver comme ceci:

NSData *imageData = [[NSUserDefaults standardUserDefaults] dataForKey: @"image"]; 
cell.imageView.image = [NSKeyedUnarchiver unarchiveObjectWithData: imageData]; 
+0

Merci pour la réponse rapide. Les erreurs ont toutes disparu, mais au lieu de montrer l'image, j'ai une flèche pointant vers la droite dans la cellule. – Blade

+0

Et je pense que maintenant le problème à cela, il ne sauvegarde rien dans la touche @ "image" ... – Blade

+1

@Blade Pour autant que je peux voir, vous devez initialiser 'yourUIImage' avec un véritable' UIImage' avant l'archivage à l'utilisateur par défaut. – Costique

1

Le message d'erreur:
"types pointeur incompatible envoi "NSString *" à paramater de type "NSData *""
Un NSString a été fourni en tant que paramètre à la place d'un NSData.
En regardant votre méthode ligne d'appel:

cell.imageView.image = [UIImage imageWithData:@"bild"]; 

Le paramètre est un NSString: @"bild".
La documentation pour UIImage imageWithData est:
data: Les données d'image. Cela peut être des données d'un fichier ou des données que vous créez par programme.
vous devez obtenir les données d'image du NSArchive et les fournir (les données) à la méthode imageWithData.

Il est toujours rentable de lire et de comprendre les messages d'erreur, même s'il faut un certain temps pour les comprendre.

+0

Merci pour votre réponse rapide. Je suis farily nouveau à programmer et lire sur le message d'erreur, mais ai pensé que je le ferais de la bonne manière et pourrait avoir fait une autre erreur (comme Im l'enregistrant dans NSData). Si je vous comprends correctement, je dois obtenir les données de "yourUIImage", correct? J'ai essayé cela mais ensuite il ne me montrera pas l'image juste une flèche pointant vers la droite dans la cellule. – Blade

+0

Voir la réponse de @Costique pour savoir comment gérer 'NSKeyedUnarchiver'. Ma réponse est plus sur la façon de comprendre le message d'erreur. – zaph

+0

Merci pour vos bons conseils :) – Blade