5

我正在使用 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");
}
4

1 回答 1

4

一般来说,您不应该尝试捕获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

于 2011-06-18T13:44:24.850 回答