Какао - `stringWithContentsOfURL / dataWithContentsOfURL` вызывает ОШИБКУ? - PullRequest
0 голосов
/ 16 апреля 2011

Следующий код почему-то порадовал работает. Я проверял URL так много раз, что это не смешно (он возвращает простой текст, который я хотел бы проанализировать). Код был на 100% функциональным, затем он просто перестал работать и начал выдавать ошибку EXC_BAD_ACCESS.

В выходных данных отладки нет ничего, кроме сообщения о том, что выход переключается на процесс дважды. (За исключением иногда кое-что о двойном выпуске.)

Пока (насколько я помню) я пробовал:

  • Переустановка приложения - проблемы возникают только при запуске по умолчанию (не при первом запуске / запуске.)
  • Запуск URL в браузере (chrome, firefox, IE ...)
  • Перевод вызова в блок @try / @catch
  • Использование retain
  • Использование температуры NSAutoreleasePool
  • Разделение / разделение элементов вызова (вместе с логином Все - , как только он попадет в ошибку, ничего не регистрируется )
  • Использование функций dataWithContentsOfURL с указанным выше

NSAutoreleasePool *tmpPool = [[NSAutoreleasePool alloc] init];

NSString *url_string = [self getNormalVersionDownloadURL];
NSLog(@"urlString: -%@-", url_string);
NSError *er;

NSURL *the_URL = [[NSURL URLWithString:url_string] retain];
NSString *version_String =  [NSString stringWithContentsOfURL:the_URL encoding:NSASCIIStringEncoding error:&er];

NSLog(@"verions_string: -%@-", version_String);

if ([version_String length] < 16)
    return;

[tmpPool release];

(NSAutoreleasePool и autorelease добавлено из-за http://discussions.apple.com/thread.jspa?threadID=1667544)

(обналиченная страница - http://webcache.googleusercontent.com/search?q=cache:8D7zlQdG9PMJ:discussions.apple.com/thread.jspa%3FthreadID%3D1667544+http://discussions.apple.com/thread.jspa%3FthreadID%3D1667544&cd=1&hl=en&ct=clnk&gl=us&source=www.google.com)

Ответы [ 2 ]

3 голосов
/ 16 апреля 2011

arguments.apple.com в настоящее время недоступен, поэтому я не могу прочитать ветку обсуждения.В любом случае:

NSString *url_string = [[self getNormalVersionDownloadURL] autorelease];

Возвращает ли -getNormalVersionDownloadURL принадлежащий или не принадлежащий объекту?Вы отправляете -autorelease только если метод возвращает принадлежащий объект.

NSError **er;

Вместо этого должно быть NSError *er, или оно должно быть инициализировано с адресом переменной типа NSError *.Поскольку последнее является редким и ненужным, в следующем предполагается, что NSError *er.

NSURL *the_URL = [[NSURL URLWithString:url_string] autorelease];

+URLWithString: возвращает объект NSURL, который вам не принадлежит, следовательно, вы не (автоматически) его освобождаете.

version_String = [[NSString stringWithContentsOfURL:the_URL 
    encoding:NSASCIIStringEncoding error:er] autorelease]; //ERROR occurs here

Две проблемы :: +stringWithContentsOfURL: возвращает объект NSString, который вам не принадлежит, следовательно, вы не (автоматически) его освобождаете.Кроме того, третий параметр должен быть &er вместо er.

0 голосов
/ 16 апреля 2011

URLWithString и stringWithContentsOfURL являются вспомогательными методами, а затем уже помещают переменную в autorelease. Я не думаю, что вам нужно добавлять autorelease при создании the_URL и version_String

, пытаясь удалить autorelease ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...