问题很容易解释,但我很难解决。我有一个永远不会初始化的属性。
首先,我正在使用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)答案 0 :(得分:0)
好吧,看起来答案就是borrrden所说的,问题是LLDB调试器。实际上,我的属性已初始化,但调试器没有检测到它,如果我将其更改为GDB,我可以看到它毕竟不是零。此外,我之所以遇到我的子视图控制器插座的原因是因为我没有在iOS5中使用View Controller Container方法(DidMoveParentViewController和那些)。
有点棘手。