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

image_in_controllerを使用すると、コードの後に​​EXC_BAD_ACCESSが表示されます。UIImage */imageNamedで動作しない単純な代入

私は割当て時にブレークポイントを設定しました。変数testはちょうど良い設定になっています。selfimage_in_controllerへの割り当て後、testはまだOKですが、image_in_controllerは0x0(nilではない)を指しています。

シミュレータで同じコードを実行すると、正常に動作します(self.image_in_controllerには有効なポイントアドレスがあります)。

アイデア?

答えて

3

プロパティimage_in_controllerは保持されたプロパティですか?そうでない場合は、retainメッセージで画像の所有権を明示的に取得する必要があります。だから、どちらかの1:

@property(retain) UIImage* image_in_controller; 

または

self.image_in_controller = [test retain]; 

が存在している必要があります。 EXC_BAD_ACCESSは、多くの場合、破棄されたオブジェクトを使用することによって発生します。また、テストが実際にはnilでないことを確認するためのテスト。アサーションでこれを行うことができます:

NSParameterAssert(test); 

テストが割り当てられた直後です。 UIImageがデバイス上の何らかの理由で有効なオブジェクトを返さないかどうかを知らせます。最後に

は、0x0のは nilのメモリアドレスであるので、あなたは、多くの場合、デバッガでと(すべての意図や目的のために)ゼロ、ナシ、NULLと0

+0

アサーションと同じと考えることができていることがわかりますパス、それは私を夢中にしているものです。アサーションはまだ終わっていますが、XCodeはポインタが0x0を指していることを伝えています。イメージのサイズを取得した場合、正常に動作します。データが関連付けられていないようです。シミュレータで実行すると、インスペクタは私に有効なアドレス(0x0ではなく)を表示します。デバイス上では、それはそれを考慮していない(すなわち、アサーションが成功し、それをnilと比較するとfalseに戻ってくる) –

+0

それは保持されていますか? –

+0

私はあなたが質問に正しく答えたことを説明しました。それは別の問題であったことが判明し、デバッガの気まぐれが私を捨てていました。私はまだデバッガが私にイメージがデバイスの0x0とsimの有効なアドレスを指していたと私に言っているのかどうか確信していません。私はアドレスを書き出してデバッグしましたが、確かに0ではありませんでした.XCodeで起こっている奇妙なことのように聞こえます。いずれにしても、あなたの答えは私が尋ねたものには完璧です。割り当ては実際にうまく機能しています。 –

関連する問題