-1

グリッド ビューを描画していて、セレクターを起動するとEXC_BAD_ACCESSエラーが発生します。UIButtonゾンビ オブジェクトをオンにすると、次のメッセージが表示されます。

*** -[FooViewController performSelector:withObject:withObject:]: message sent to deallocated instance 0x91818f0

これが私がやっていることです:

BazViewController *baz = [[BazViewController alloc] initDesignatedInitializer];
FooViewController *foo = [[FooViewController alloc] initDesignatedInitializer];
[baz.view addSubview:foo.view];

これを ARC で実行しているため、FooViewController の割り当てが途中で解除される可能性があることがわかりました。

だから私はこのハックをしました:

NSMutableArrayという名前の BazViewController に ivar&property を作成し、viewControllers代わりに次のようにしました。

BazViewController *baz = [[BazViewController alloc] initDesignatedInitializer];
FooViewController *foo = [[FooViewController alloc] initDesignatedInitializer];
[baz.view addSubview:foo.view];
[baz.viewControllers addObject:foo];

しかし、それでも上記と同じエラーが発生します。

グリッドを扱うビュー コントローラーで上記と同等の処理を行いました。(View Controllers 配列を作成し、そのオブジェクトの作成時にオブジェクトを追加します)。まだサイコロはありません。このVCが時期尚早に解放されるのを防ぐ別の方法を誰かが推奨できますか?

4

2 に答える 2

3

この問題は自分で解決しました。

配列を作成する代わりにaddChildViewController、適切な VC への強力な参照を追加していました。時期尚早の割り当て解除やゾンビ オブジェクトはありません。

BazViewController *baz = [[BazViewController alloc] initDesignatedInitializer];
FooViewController *foo = [[FooViewController alloc] initDesignatedInitializer];
[baz.view addSubview:foo.view];
[baz addChildViewController:foo];
于 2012-06-11T19:17:46.573 に答える
1

それを作成しているクラスにプロパティを作成し、FooViewControllerプロパティにstrong属性を与えます。ローカル変数ではなく、それに割り当てます。

于 2012-06-11T17:15:40.220 に答える