我有以下代码,按下按钮执行。起初它按预期工作,但第二次应用程序挂起,我得到 EXC_BAD_ACCESS 信号。
- (IBAction) comicDetailsPressed:(id)sender {
static IssueProperties *props = nil;
if (props == nil) {
props = [ComicDataParser
parseComicForUrl:@"http://dummy.com/Jan.xml"];
}
NSLog(@"%d", [props totalPages]);
totalPages.text = [NSString stringWithFormat:@"%d", [props totalPages]];
}
答案 0 :(得分:2)
你没有说出它崩溃了什么线,这意味着答案必须是推测性的。
您有一个指向IssueProperties
对象的静态指针,但是当您指定它时,您没有使用retain
。你可能应该。
这假设parseComicForUrl:
的返回值是IssueProperties
对象或子类。
我假设text
属性是NSString
设置为copy
而不是retain
。如果没有,那应该是。
答案 1 :(得分:1)
您需要保留从+parseComicForUrl:
返回的对象。另外,为什么不为props
使用实例变量?
答案 2 :(得分:1)
如果没有更多的背景,那肯定无法回答,但我首先想到的是:
你的static IssueProperties *props
第二次不会是零。相反,它将具有[ComicDataParser parseComicForUrl]
返回的值。
我的猜测是ComicDataParser
是autorelease
响应,所以第二次你的指针不是nil,但现在指向已经release
d对象,无效。
如果我是对的,你需要retain
某处。