为什么我会得到EXC_BAD_ACCESS?

时间:2010-10-04 17:52:57

标签: objective-c macos exc-bad-access

我有以下代码,按下按钮执行。起初它按预期工作,但第二次应用程序挂起,我得到 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]]; 
}

3 个答案:

答案 0 :(得分:2)

你没有说出它崩溃了什么线,这意味着答案必须是推测性的。

您有一个指向IssueProperties对象的静态指针,但是当您指定它时,您没有使用retain。你可能应该。

这假设parseComicForUrl:的返回值是IssueProperties对象或子类。

我假设text属性是NSString设置为copy而不是retain。如果没有,那应该是。

答案 1 :(得分:1)

您需要保留从+parseComicForUrl:返回的对象。另外,为什么不为props使用实例变量?

答案 2 :(得分:1)

如果没有更多的背景,那肯定无法回答,但我首先想到的是:

你的static IssueProperties *props第二次不会是零。相反,它将具有[ComicDataParser parseComicForUrl]返回的值。

我的猜测是ComicDataParserautorelease响应,所以第二次你的指针不是nil,但现在指向已经release d对象,无效。

如果我是对的,你需要retain某处。