我目前正致力于从外部API读取一些XML。
以下代码可以正常使用:
NSError *error = nil;
NSString *xmlString = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
但是,我想添加一些错误处理(“无法访问服务器”,“无Internet连接”等)。所以,我在Reachability示例代码的帮助下放置了这个块:
if ([error code] == kCFURLErrorNotConnectedToInternet) {
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:NSLocalizedString(@"No Internet connection",@"Error message displayed when not connected to the Internet.") forKey:NSLocalizedDescriptionKey];
NSError *noConnectionError = [NSError errorWithDomain:NSCocoaErrorDomain code:kCFURLErrorNotConnectedToInternet userInfo:userInfo];
[self handleError:noConnectionError];
} else {
// otherwise handle the error generically
[self handleError:error];
}
handleError方法只显示带有错误详细信息的UIAlertView。当我在没有连接的情况下运行应用程序时,我希望看到我的错误消息。但是,我得到的只是“操作无法完成(Cocoa错误256)”,这是我可以收集的一般读取错误。
起初我认为它可能只是TouchXML的方法,但正如您所看到的,我将其更改为NSString的initWithCOntentsOfURL。
任何人都可以解释这个问题吗?
谢谢,
富
答案 0 :(得分:0)
您发现了除kCFURLErrorNotConnectedToInternet
之外的其他错误。错误消息不是来自您的自定义错误,而是由引擎盖下的某个对象生成的。您需要转储您实际获得的错误的userInfo dict以查看详细信息。我会记录它而不是使用警报来确保你得到所有这些。
如果userInfo dict实际上是空的,我将首先测试url以查看它是否实际返回任何内容。尝试初始化数据对象,看看你得到了什么。这将缩小URL的问题和将数据转换为字符串的问题。
答案 1 :(得分:0)
试试这个: 1)使用dataWithContentsOfURL创建NSData 2)仅当上面创建的NSData不为空时才创建xmlString,即通过检查if(data)