2011-12-16 68 views
0

当我尝试获取非空变量时,我收到一个SIGABRT。代码:无法从模型中获得价值

NSLog(@"%@", appDelegate.xmlData.magDictionary); 
for (Magazine *ibb in appDelegate.xmlData.magDictionary) { 
     NSLog(@"%@", [ibb title]); 
} 

输出:

{ 
     1 = "<Magazine: 0x6c8fe10>"; 
     2 = "<Magazine: 0xf168d00>"; 
     3 = "<Magazine: 0xf169f50>"; 
     4 = "<Magazine: 0xf16b6d0>"; 
     5 = "<Magazine: 0xf170490>"; 
     6 = "<Magazine: 0xf1716c0>"; 
     7 = "<Magazine: 0xf172a80>"; 
     8 = "<Magazine: 0xf173f10>"; 
    } 

和SIGABRT上的NSLog(@ “%@”,[IBB标题]);杂志模型:@synthesize title,key,teaser,tags,items,progressBar;

+3

在这种情况下@属性定义比`@ synthesize`更有趣,`retain`,`assign`,`copy`? – 2011-12-16 12:42:24

回答

1

根据评论,你的Magazine初始值设定项似乎出错了。
使用retain模式的属性并不重要,但我会用copy而不是字符串。

反正title字符串从originalMag未来将不保留,或者分配给title伊娃您Magazine在所有复制的,因此,我敢打赌,你尝试打印任何值前被释放,导致崩溃。

还有一点,这样做的:

title = [[NSString alloc] init]; 
title = [originalMag title]; 

产生内存泄漏(和你仍然不保留原title)。
重写初始化像这样:

-(id)initWithMagazine:(Magazine *)originalMag { 
    ..... 
    title = [[originalMag title] copy]; 
    // or title = [[NSString alloc] initWithString:[originalMag title]]; 
    .... 
} 

,这应该解决您的应用程序崩溃。