[NSError сохранить]: сообщение отправлено в освобожденный экземпляр

Я использую стороннюю библиотеку и вызываю одну из ее функций следующим образом.

NSError* error = nil;
self.updatedDocument.bookmarkParser.bookmarks = newBookmarks;
//save the document
[self.updatedDocument.bookmarkParser saveBookmarksWithError:&error];
[self.updatedDocument saveAnnotationsWithError:&error];

Сторонний файл apis .h выглядит следующим образом.

/// Saves the bookmark into a plist file at bookmarkPath.
/// @note Saving is done async.
- (BOOL)saveBookmarksWithError:(NSError *__autoreleasing*)error;

Я не уверен, правильно ли я использую этот указатель NSError, поскольку я не уверен, что делает *__autoreleasing. Спасибо за вашу помощь.


person Ankit Srivastava    schedule 20.03.2015    source источник
comment
__autoreleasing* отпустите объекты по возвращении. Я не уверен, но я думаю, что ваше предположение об использовании выпущенного объекта во втором вызове метода верно. Ознакомьтесь с ответом Колина. Этот поток также касается это понятие.   -  person Gandalf    schedule 20.03.2015


Ответы (1)


__autoreleasing означает, что библиотека поддерживает ARC, и вам не нужно освобождать NSError, возвращаемый методом saveBookmarksWithError. Вы можете передать этому методу нулевое значение, если не хотите обрабатывать состояние ошибки. В противном случае вы можете передать указатель NSError, указанный в примере кода, и отобразить его пользователю или записать в журнал.

person Nitheesh George    schedule 20.03.2015
comment
Сразу после этого я вызываю другой метод, но с той же ошибкой, может ли это быть причиной сбоя? Поскольку это уже было выпущено, и второй метод пытается сохранить его..? - person Ankit Srivastava; 20.03.2015
comment
Если вы используете ARC, то NSError не будет выпущен при переходе к другому методу. Не могли бы вы поделиться своим кодом здесь. - person Nitheesh George; 20.03.2015
comment
Я поделился этим в вопросе. - person Ankit Srivastava; 20.03.2015