Обработка NSAsserts в бросках Restkit - PullRequest
5 голосов
/ 18 июня 2011

Я использую менеджер объектов Restkit, чтобы обработать хороший вызов моих удаленных вызовов API.

Выдает NSAssert для широкого спектра ошибок. Например, если сервер возвращает страницу с ошибкой, а не правильно сформированный json, он вызовет NSAssert, даже если в коде нет ничего плохого.

Есть несколько вещей, которые меня смущают (большинство из которых связано с общей обработкой исключений и nsasserts)

  1. Как мы должны обрабатывать эти ошибки NSAsserts? Например, мы хотели бы повторить попытку несколько раз, а затем показать сообщение «что-то пошло не так». (в отличие от сбоя приложения)

  2. Я пытался использовать блок catch-try для перехвата ошибок (код ниже), но ошибки не перехватываются. Так что мое приложение просто не работает. Более того, мне все равно неудобно использовать try-catch в режиме релиза.

  3. Просто для моего понимания, почему Restkit использует NSAsserts, в отличие от других сбоев

Большое спасибо за вашу помощь - высоко ценится!

// code to catch NSAssert that sharedManager throws
@try{
    [sharedManager loadObjectsAtResourcePath:self.resourcePath delegate:self];
}

@catch (NSException *ex) {
    NSLog(@"exception caught");
}

1 Ответ

3 голосов
/ 18 июня 2011

В общем, вам следует НЕ пытаться отловить NSAssert ошибки, поскольку они означают, что что-то пошло не так - например, внутреннее состояние приложения стало несовместимым, вы неправильно используете библиотеку и т. Д., - ипоэтому приложение должно выйти. [1]

Причина, по которой ваши ошибки не обнаруживаются, заключается в том, что NSAssert вызывает NSInternalInconsistencyException [2], то есть строка , а неэкземпляр NSException.Вы все еще можете поймать их согласно [3], например, с помощью

    @catch (id ex)

, но это не рекомендуется по причинам, перечисленным выше.

Чтобы ответить на третий вопрос, укажите более подробную информацию о том, какиеNSAssert поднял и т. Д.

[1] Какой смысл NSAssert, на самом деле?

[2] http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html#//apple_ref/c/macro/NSAssert

[3] http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Exceptions/Tasks/HandlingExceptions.html

...