iOS w / storyboards& ARC:Controller属性未初始化

时间:2012-04-03 21:56:11

标签: ios ios5 properties storyboard automatic-ref-counting

问题很容易解释,但我很难解决。我有一个永远不会初始化的属性。

首先,我正在使用iCarousel自定义类,以便为我的应用显示一些图像。在其中一个委托方法(它用于知道哪个视图将在某个索引处显示的方法)中,我使用此代码:

- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view
{
   if(!view)
   {
      CustomController* controller = [self.storyboard instantiateViewControllerWithIdentifier: "identifier"]; 
      //BTW, the CustomController is initialized properly. Its instance is not nil after the initialization.
      controller.imageView.image = [UIImage imageNamed: "something.png"];
      view = controller.view;
   }

   return view;       
}

正如您所看到的,我在旋转木马中显示的视图是具有自己的控制器的自定义视图。我使用storyboard方法初始化它然后我只是在我的imageView属性中设置图像,这显然是一个UIImageView。

不要兴奋并说我没有初始化我的imageView,因为我的“CustomController”类中有一个自定义的getter。像这样:

// interface(.h)

...

@property (nonatomic, strong) UIImageView* imageView;

...

// implementation(.m)

...

@synthesize imageView = _imageView;

...

- (UIImageView*) imageView
{
   if(!_imageView)
      _imageView = [[UIImageView alloc] init];
   return _imageView;
}

...

信不信由你,即使我在“_imageView = [[UIImageVIew alloc] init]中放置一个断点;”......程序执行该行,但_imageView仍为零。 ¿为什么呢?

我不想知道“如何设置我的财产”,所以请不要为此提供解决方法......我想知道的是“为什么我的财产从未被设置并且始终为零”,什么是我做错了吗?。

我也尝试将我的imageView用作IBOutlet ......但即使我将它链接到Interface Builder中的imageView并在“viewDidLoad”之后检查它的值,它仍然是零。

P.S:顺便说一句,我正在使用ARC(是的,我知道是在标题中...... xD)

1 个答案:

答案 0 :(得分:0)

好吧,看起来答案就是borrrden所说的,问题是LLDB调试器。实际上,我的属性已初始化,但调试器没有检测到它,如果我将其更改为GDB,我可以看到它毕竟不是零。此外,我之所以遇到我的子视图控制器插座的原因是因为我没有在iOS5中使用View Controller Container方法(DidMoveParentViewController和那些)。

有点棘手。