2012-09-24 100 views
5

无法弄清楚发生了什么。为什么UIViewController会释放,虽然它在屏幕上

我正在构建一个使用带分页的滚动视图的iPhone应用程序。滚动视图包含几个视图,其视图控制器通过调用从故事板被装起来:

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

我添加视图控制器到一个可变的阵列和它们视图添加到滚动视图作为子视图。 在屏幕上出现后,视图控制器被解除分配,因此目标操作不再起作用。

当我启用僵尸对象,调试器写这个上发送一个动作到控制器:

*** - [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]; 
+0

pageControllers是如何声明的? – mark

+0

pageControllers被声明为私有@property – boeqqsh

回答

3

如果您正在使用ARC东西辍学通常,当你不再有一个有效的指针的东西。所以在你的情况下,你的视图控制器超出了范围并被释放。由于self.scrollView被持有,该视图仍然保留。将视图控制器添加到数组可以解决这个问题,但前提是数组已经正确实例化。属性不会自动实例化。除非您覆盖访问者,否则使用该属性也不会为您实例化它。由于Cocoa的特性,您不会因尝试将对象添加到nil属性而获得任何错误或消息,因为它是完全有效的代码。

检查您是如何创建pageControllers并确保您正确实例化它 之前使用它。

例如。 self.pageControllers = [[NSMutableArray alloc] init];

+0

它只是这一行代码。非常感谢! :) – boeqqsh

+0

3年后,仍然有用!谢谢! – PaperThick

相关问题