gpt4 book ai didi

iphone - 在 Restkit 中处理 NSAsserts 抛出

转载 作者:可可西里 更新时间:2023-11-01 04:44:48 25 4
gpt4 key购买 nike

我正在使用 Restkit 的对象管理器来处理大量远程 API 调用。

它会针对各种错误抛出 NSAssert。例如,如果服务器返回错误页面而不是格式良好的 JSON,它会引发 NSAssert,即使代码没有任何问题。

有几件事让我感到困惑(其中大部分与异常和 nsassert 的一般处理有关)。

  1. 我们应该如何处理这些 NSAsserts 错误?例如,我们想要重试几次,然后显示“出现问题”消息(而不是使应用程序崩溃)。

  2. 我尝试使用 catch-try block 来捕获错误(下面的代码),但没有捕获到错误。所以我的应用程序一直失败。此外,无论如何,我不习惯在 Release模式下使用 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");
}

最佳答案

一般来说,您应该 try catch NSAssert 错误,因为它们意味着出现了可怕的错误——例如应用程序内部状态变得不一致,您使用的库不正确等等,因此应用程序需要退出。[1]

你的错误没有被捕获的原因是因为 NSAssert 引发了一个 NSInternalInconsistencyException[2],它是一个 string 而不是一个实例的 NSException。您仍然可以按照 [3] 捕获它们,例如与

    @catch (id ex)

但由于上述原因不推荐。

要回答您的第 3 个问题,请提供有关引发 NSAssert 等的更多详细信息。

[1] What's the point of NSAssert, actually?

[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

关于iphone - 在 Restkit 中处理 NSAsserts 抛出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6395098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com