2012-03-21 34 views
0

我有一个错误,我怀疑可能是编译器......我不是专家本人,但我检查了一些与专家完全相同的行为的其他代码,弄明白了。属性以无效地址启动

我设置一个属性作为这样: @interface aViewController()

@property (nonatomic, strong) NSArray *listOfTitles; 
@end 

@implementation aViewController 

@synthesize listOfTitles = _listOfTitles; 

- (NSArray *)listOfTitles 
{ 
    if (!_listOfTitles) 
     _listOfTitles = [NSArray arrayWithObjects:@"first", @"second", @"third", @"fourth", nil]; 
    return _listOfTitles; 
} 

然而,应用程序崩溃(阵列将是更复杂的,并且用于设置textLabel.text性质上的UITableViewCell)。

什么令我困扰,这是NSArray总是有一个无效的地址(0x00000001)。我错过了什么?这不是正确的方式来做懒惰的实例吗?

就像我提到的,在其他项目中,我遇到了与其他类完全相同的东西(使用0x00000001实例化的属性)。这就是为什么我怀疑编译器成为问题。但真的,我全力以赴的解决方案!...

+0

您是否正在编译ARC?如果没有,你没有正确地管理你的内存。如果你是,你如何检查价值观? lldb中存在一个影响查看ivars的错误。 – 2012-03-21 01:48:55

+0

你的头文件中声明了名为_listOfTitles的iVar吗? – lnafziger 2012-03-21 01:49:33

+0

@lnafziger:ivar由'@synthesize listOfTitles = _listOfTitles;'指令创建。 – 2012-03-21 02:10:48

回答

0

最明显的解决方案是在您的init函数中将ivar设置为零。

-(id)init{ 
    if (self = [super init]){ 
     _listOfTitles = nil; 
    } 
} 

真正的问题是为什么不这样做,因为所有的ivars应该初始化为零。我怀疑它与在.m文件中声明的属性有关。无论哪种方式,它都不会损害你自己的伊娃。

+0

谢谢你的回答。不幸的是,它没有改变行为。我仍然收到无效的地址。我不能影响NSArray的任何值... – invalidArgument 2012-03-23 14:34:02