我尝试使用命令:
从某些网址检索数据-(NSMutableData *) callUrl: (NSString *)url withData:(NSMutableDictionary *)data delegate:(id) delegate {
NSURL *executeUrl = [NSURL URLWithString:<string>];
NSURLRequest *request = [NSURLRequest requestWithURL: executeUrl
cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
timeoutInterval:60];
NSMutableData *receivedData = nil;
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:request delegate:delegate];
if (theConnection) {
receivedData = [[NSMutableData data] retain];
} else {
@throw @"Connection error";
}
return receivedData;
}
在委托中(在connectionDidFinish和connectionDidFailWithError之后)我这样做:
//some uninvasive alerts
// release the connection, and the data object
[connection release];
[receivedData release];
问题是,当我提供错误的网址时,我得到了正确的错误 - 这是很好的部分 - 但后来我想要执行第二个网址 - 确实很好,我有1003错误 - NSURLErrorCannotFindHost。
大约1-2分钟后,我成功调用了url并获取数据。 我怀疑一些超时和端口业务,但在NSURLRequest中更改超时不会改变一件事。
更新
事实证明 - 管理员在通过WiFi网络到达DNS服务器时遇到了一些问题。代码很好。谢谢你的回复。 如果有些问题类似:尝试使用ip地址而不是主机名。
答案 0 :(得分:1)
从Apple iOS开发人员文档中,1003错误指的是无法解析URL的主机名。为了避免在DNS中出现DNS故障,重载DNS场景,最好从主机名解析ip以供后续使用,或者直接硬编码IP地址,如果你不打算稍后转移主机。
Apple文档:
URL Loading System Error Codes
这些值作为NSError对象的错误代码属性返回,其域名为“NSURLErrorDomain”。
enum
{
NSURLErrorBadURL = -1000,
NSURLErrorTimedOut = -1001,
NSURLErrorUnsupportedURL = -1002,
NSURLErrorCannotFindHost = -1003,//****
NSURLErrorCannotConnectToHost = -1004,
NSURLErrorDataLengthExceedsMaximum = -1103,
NSURLErrorNetworkConnectionLost = -1005,
NSURLErrorDNSLookupFailed = -1006,
...
}
1003 NSURLErrorCannotFindHost
Returned when the host name for a URL cannot be resolved.
Available in iOS 2.0 and later.
Declared in NSURLError.h.
答案 1 :(得分:1)
我做了两件事来解决这个问题:
我在启动NSUrlConnection之前使用过它
[NSURLConnection cancelPreviousPerformRequestsWithTarget:self];
不知道哪一个修好了但是问题已经解决了。
答案 2 :(得分:0)
在进行任何新的连接呼叫之前取消之前的连接。 使用
[self.connection cancel];