2009-04-21 6 views
0
UIImage* test = [UIImage imageNamed:@"test.png"]; 
self.image_in_controller = test; 

Plus tard dans le code lorsque image_in_controller est utilisé, j'obtiens EXC_BAD_ACCESS.Affectation simple ne fonctionnant pas avec UIImage */imageNamed

J'ai défini un point de rupture autour du moment de l'affectation. Le test de la variable est réglé correctement. Après l'affectation à selfimage_in_controller, le test est toujours correct, mais image_in_controller pointe sur 0x0 (pas nul).

Si je cours le même code dans le simulateur, cela fonctionne bien (self.image_in_controller a une adresse de point valide).

Des idées?

Répondre

3

La propriété image_in_controller est-elle une propriété conservée? Sinon, vous devrez explicitement prendre possession de l'image avec un message retain. Donc, l'un des deux:

@property(retain) UIImage* image_in_controller; 

ou

self.image_in_controller = [test retain]; 

devrait exister. L'EXC_BAD_ACCESS est souvent provoquée en utilisant un objet qui a été détruit. Testez également pour vous assurer que le test n'est pas réellement nul. Vous pouvez le faire avec une assertion:

NSParameterAssert(test); 

juste après l'affectation du test. Il vous indiquera si UIImage ne renvoie pas un objet valide pour une raison quelconque sur le périphérique.

Enfin, 0x0 est l'adresse de mémoire de nil, vous verrez souvent que dans le débogueur et peut (pour toutes fins utiles) être considéré comme le même que nul, Nil, NULL et 0.

+0

Les assertions passe, qui est ce qui me dérange. Les assertions passent encore XCode me dit que le pointeur pointe vers 0x0. Si j'obtiens la taille de l'image, cela fonctionne bien ... il ne semble pas que les données soient associées. Si je l'exécute dans le simulateur, l'inspecteur me montre une adresse valide (pas 0x0). Sur l'appareil, cependant, il ne le considère pas comme nul (ie: les assertions passent, et si je le compare à zéro il revient faux) –

+0

Est-ce qu'il est conservé? –

+0

C'est .. comme je l'ai expliqué, vous avez répondu correctement à la question. Il s'avère que c'était un problème différent, et l'excentricité dans le débogueur me rejetait. Je ne sais toujours pas pourquoi le débogueur me disait que l'image pointait vers 0x0 dans l'appareil, et une adresse valide dans le sim. J'ai débugué a écrit l'adresse et il n'était certainement pas 0 Ça sonne comme de l'étrangeté qui se passe avec XCode. Quoi qu'il en soit, votre réponse est parfaite pour ce que j'ai demandé, et la tâche fonctionne très bien. –

Questions connexes