NSURL URLWithString:引发异常

Ste*_*ton 5 iphone objective-c crash-reports

简而言之,[NSURL URLWithString:]似乎提出了一个例外。根据文档“如果字符串格式错误,则返回nil。” 没有提到在任何情况下都引发例外情况。除此之外,nil在将字符串转换为URL之前,我都对URL进行了编码和检查。

在转换URL之前,任何人都可以提供有关它可能是哪个异常或我应该做的其他错误检查的任何建议吗?

如果您对详细信息感兴趣,则调用代码如下所示:

NSString* tmpText = [newUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
if (tmpText == nil) {
    // error handling
}
else {
    NSURL* tmpURL = [NSURL URLWithString:tmpText];
Run Code Online (Sandbox Code Playgroud)

这是从iTunes Connect下载的崩溃报告中的一部分:

8   libobjc.A.dylib                 0x300c1f84 objc_exception_throw
9   CoreFoundation                  0x3029a598 +[NSException raise:format:arguments:]
10  CoreFoundation                  0x3029a538 +[NSException raise:format:]
11  Foundation                      0x30696dde -[NSURL initWithString:relativeToURL:]
12  Foundation                      0x30696cd8 +[NSURL URLWithString:relativeToURL:]
13  Foundation                      0x30696cae +[NSURL URLWithString:]
14  Yummy                           0x000146ca -[DeliciousPostCell setUrl:] + 46
Run Code Online (Sandbox Code Playgroud)

该URL似乎是某种“错误”格式,但实际上应该返回一个nil异常。

我从未见过自己引发异常,因此无法使用XCode捕获代码并查看正在发生的情况。并且遇到问题的用户从未直接与我联系,因此我无法要求更多详细信息。任何建议,不胜感激。

更新(14/7/2009):看起来像这样的hack,但是我在可疑行周围添加了一个异常块。我还提出了Radar错误报告(#7031551),建议代码应与文档匹配。

mon*_*dom 2

我遇到过一些 API 抛出异常的情况,而根据文档,这些异常不应该抛出。我的建议是确保(在您的实际代码中) tmpText 确实不是 nil (在这种情况下会抛出异常,因为大多数期望 NSStrings 的 api 都不是 nil 保存在那里)。之后,只需在其周围添加异常处理并向 bugreporter.apple.com 提交错误报告即可。