在Restkit抛出中处理NSAsserts

min*_*eow 5 iphone objective-c ios4 ios restkit

我正在使用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");
}
Run Code Online (Sandbox Code Playgroud)

Vic*_* K. 4

一般来说,您应该尝试捕获NSAssert错误,因为它们意味着出现了严重错误 - 例如应用程序内部状态变得不一致,您错误地使用了库等 - 因此应用程序需要退出。[1]

错误未被捕获的原因是NSAssert引发了一个NSInternalInconsistencyException[2],它是一个字符串,而不是 NSException 的实例。您仍然可以按照[3]捕获它们,例如

    @catch (id ex)
Run Code Online (Sandbox Code Playgroud)

但由于上述原因,不建议这样做。

为了回答您的第三个问题,请提供所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