iphone – 为什么UIViewController已取消分配,尽管它在屏幕上

无法弄清楚发生了什么.

我正在构建一个使用带分页的滚动视图的iPhone应用程序.滚动视图包含多个视图,其视图控制器通过调用以下方式从故事板中加载:

[self.storyboard instantiateViewControllerWithIdentifier:@"identifier"];

我将视图控制器添加到一个可变数组中,并将它们的视图作为子视图添加到滚动视图中.
在屏幕上显示后,视图控制器将被取消分配,因此目标操作不再起作用.

当我启用Zombie Objects时,调试器在向控制器发送操作时写了这个:

*** – [StreamingViewController performSelector:withObject:withObject:]:消息发送到解除分配的实例0x914f0e0

我真的试图解决这个问题,但没有成功,所以非常感谢每一个帮助.

更多代码:

StreamingViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"Streaming View Controller"];

[self.pageControllers addObject:controller]; // adding view controller to mutable array

controller.view.frame = self.scrollView.frame;
[self.scrollView addSubview:controller.view];
最佳答案
如果你正在使用ARC,那么当你不再拥有指向某个东西的有效指针时,它就会掉线.因此,在您的情况下,您的视图控制器超出范围并被释放.该视图仍然保留,因为它由self.scrollView保存.将视图控制器添加到数组将解决该问题,但前提是数组已正确实例化. Poperties不会自动实例化.除非您覆盖访问者,否则使用该属性也不会为您实例化它.由于Cocoa的性质,您不会通过尝试将对象添加到nil属性来获取任何错误或消息,因为它是完全有效的代码.

检查如何创建pageControllers并确保正确实例化它
在使用它之前.

eg.self.pageControllers = [[NSMutableArray alloc] init];

转载注明原文:iphone – 为什么UIViewController已取消分配,尽管它在屏幕上 - 代码日志