我想从某个服务器下载一些文件。下载文件在Thread中工作的功能。所以,你可以在这里看到它:
NSURL *url = [NSURL URLWithString:fileDataBaseURL];
NSURLRequest *theRequest=[NSURLRequest requestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
NSURLConnection *theConnection = [NSURLConnection connectionWithRequest:theRequest delegate:self];
if (theConnection) {
[[NSFileManager defaultManager] createFileAtPath:fileDataBaseEnc contents:nil attributes:nil];
self._handleDataBaseEnc = [NSFileHandle fileHandleForUpdatingAtPath:fileDataBaseEnc];
} else {
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
}
我也有功能:
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[_handleDataBaseEnc seekToEndOfFile];
NSMutableData *receivedData = [NSMutableData data];
[receivedData setLength:0];
[receivedData appendData:data];
[_handleDataBaseEnc writeData:receivedData];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
[_handleDataBaseEnc closeFile];
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
[_handleDataBaseEnc closeFile];
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
}
问题
为什么这三个功能不起作用?它永远不会打电话。
我该如何解决?
答案 0 :(得分:1)
来自艺术的答案:NSURLConnection delegate methods are not called
尝试在主线程上运行操作:
NSURLConnection * connection = [[NSURLConnection alloc]
initWithRequest:request
delegate:self startImmediately:NO];
[connection scheduleInRunLoop:[NSRunLoop mainRunLoop]
forMode:NSDefaultRunLoopMode];
[connection start];
答案 1 :(得分:0)
在发布的代码中没有任何内容可以解释为什么没有调用委托方法。我注意到的一点是他们没有做任何特别的事情。如何使用以下命令在一行中运行连接:
+ (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler
在实例化连接后立即调用。