0

ペン先にビューがあります。これは、ビューコントローラのプロパティに次の行でリンクされています。

@property (unsafe_unretained, nonatomic) IBOutlet UIView *otherView;

iOS 4デバイスをターゲットにしているが、ARCを使用しているため、unsafe_unretainedです。

表示しようとしたときにotherViewの割り当てが解除されているため、クラッシュが発生しています。理由はよくわかりません。viewWillAppearにブレークポイントを設定しましたが、デバッガーで「po otherView」を実行すると、次のようになります。

<UIView: 0x6fcc880; frame = (0 0; 320 460); autoresize = RM+BM; layer = <CALayer: 0x6fcc8b0>>

viewWillAppearメソッドの最後で確認しましたが、まだそこにあります。しかし、viewDidAppearの先頭にブレークポイントを設定すると、次のようになります。

0x6fcc880 does not appear to point to a valid object.

誰かがこれで私を正しい方向に向けることができますか?プロパティ宣言を「Strong」に変更した場合、この問題は発生しません。Strongに変更することで、プロパティを保持している(したがって、割り当てが解除されない)ことを理解していますが、私はそうは思いません。これを行う必要がありますか?

よろしく、ニック

4

1 に答える 1

2

xib からのすべての topLevel オブジェクトに、保持されたプロパティ ( strong| ) が必要です。retain

ここに画像の説明を入力

上記の例view1では、保持されたプロパティが必要です。view2保持されたプロパティは必要ありませんが、何も害がないので、通常はそのまま保持します。


リテインが必要ないのはなぜですか?

view2保持されたプロパティは所有されてview1おり、参照されているため必要ありませんare arbitrary references between objects that do not imply ownership.(Apple、Resource Programming Guide )。ただし、保持されたプロパティを持っていても害はありません。必ず電話self.view2 = nilしてください。viewDidUnload

于 2012-04-05T14:36:10.720 に答える