2011-12-16 208 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]]; 
    .... 
} 

,這應該解決您的應用程序崩潰。