0

这个问题很容易解释,但对我来说很难解决。我有一个从未初始化的属性。

首先,我使用 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。像这样:

//接口(.h)

...

@property (nonatomic, strong) UIImageView* imageView;

...

//实现(.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”之后检查它的值,它仍然保持为零。

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

4

1 回答 1

0

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

有点棘手。

于 2012-04-11T16:26:04.850 回答