2010-10-22 18 views
0

Je rencontre des difficultés pour charger à partir de données enregistrées une instance d'une classe personnalisée conforme au protocole NSCoding. Ma classe a une propriété UIImage et quand je lui assigne une nouvelle UIImage, le programme se bloque avec un exc_bad_access.exc_bad_access à partir de l'objet retourné par NSKeyedUnarchiver

Dans le contrôleur de vue je déclare mon objet comme ceci:

@interface SomeViewController : UIViewController { 
    IBOutlet UIImageView *imageView; 
    SomeClass *myObject; 
} 

@property (nonatomic, retain) SomeClass *myObject; 
@property (nonatomic, retain) IBOutlet UIImageView *imageView; 

Puis dans le fichier .m il est utilisé comme suit:

@synthesize myObject; 
@synthesize imageView; 

-(void)viewDidLoad{ 
    myObject = [NSKeyedUnarchiver unarchiveObjectWithFile:someDataPath]; 
    imageView.image = myObject.image; 
} 

Jusqu'à présent, si bon. Mais plus tard, je prends une nouvelle image et d'essayer de le mettre à la propriété « image » de myObject, et cela jette un EXC_BAD_ACCESS

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    [picker dismissModalViewControllerAnimated:YES]; 
    UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 
    [imageView setImage:image]; 
    myObject.image = image; 
} 

Pour autant que je peux dire de simple pas à pas dans le code, il est le dernière ligne qui provoque l'exc_bad_access. Qu'est-ce que je fais mal?

+0

Pourquoi vous définissez myObject dans la didFinishPickingMediaWithInfo: méthode? –

Répondre

2

Vous avez à retenir myObject:

self.myObject = [NSKeyedUnarchiver unarchiveObjectWithFile:someDataPath]; 
+0

Alors, quelle est la différence entre utiliser self.myObject ici et myObject? –

+0

La différence est qu'un setter est appelé qui conserve l'objet. Vous devriez lire une introduction à Cocoa/Obj-C si ce n'est pas clair pour vous. –

+0

ah, je vois. Donc je suppose que je devrais toujours utiliser self.myObject au lieu d'y accéder directement, au moins pour des raisons d'assignation. Je vais lire l'objectif-c docs d'Apple une fois de plus, peut-être que cette fois ça va coller. –