Почему я получаю EXC_BAD_ACCESS? - PullRequest
0 голосов
/ 04 октября 2010

У меня следующий код, который выполняется при нажатии кнопки.Сначала он работает как положено, но во второй раз приложение зависает, и я получаю сигнал 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 ]

2 голосов
/ 04 октября 2010

Вы не сказали, на какую строку он падает, а это значит, что ответы должны быть умозрительными.

У вас есть статический указатель на IssueProperties объект, но когда вы присваиваете ему, выне используют retain.Вы, вероятно, должны.

Это предполагает, что возвращаемое значение из parseComicForUrl: является IssueProperties объектом или подклассом.

Я предполагаю, что свойство text является NSString установлен на copy, а не retain.Если нет, то должно быть.

1 голос
/ 04 октября 2010

Без намного большего контекста будет невозможно ответить наверняка, но моя первая мысль была бы такой:

ваш static IssueProperties *props не будет равен нулю во второй раз.Вместо этого он будет иметь значение, которое [ComicDataParser parseComicForUrl] вернуло.

Я предполагаю, что ComicDataParser является autorelease ответом, и поэтому во второй раз у вас есть указатель, который не равен нулю,но теперь указывает на уже release d объект, который недопустим.

Если я прав, вам нужно где-то retain.

1 голос
/ 04 октября 2010

Вам нужно сохранить объект, который вы получите от +parseComicForUrl:.Кроме того, почему бы вам не использовать переменную экземпляра для props?

...