initWithContentsOfURL出现奇怪错误

时间:2010-01-05 19:07:43

标签: iphone error-handling touchxml

我目前正致力于从外部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。

任何人都可以解释这个问题吗?

谢谢,

2 个答案:

答案 0 :(得分:0)

您发现了除kCFURLErrorNotConnectedToInternet之外的其他错误。错误消息不是来自您的自定义错误,而是由引擎盖下的某个对象生成的。您需要转储您实际获得的错误的userInfo dict以查看详细信息。我会记录它而不是使用警报来确保你得到所有这些。

如果userInfo dict实际上是空的,我将首先测试url以查看它是否实际返回任何内容。尝试初始化数据对象,看看你得到了什么。这将缩小URL的问题和将数据转换为字符串的问题。

答案 1 :(得分:0)

试试这个: 1)使用dataWithContentsOfURL创建NSData 2)仅当上面创建的NSData不为空时才创建xmlString,即通过检查if(data)