-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&propertyviewControllers并改为执行以下操作:

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

但我仍然得到上面同样的错误。

我继续在处理网格的视图控制器上执行与上述相同的操作。(创建一个视图控制器数组,并在创建该对象时将对象添加到其中)。还是没有骰子。谁能推荐另一种方法来防止此 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 回答