不要调用连接:(NSURLConnection *)连接didReceiveData:(NSData *)数据

时间:2013-01-30 15:06:38

标签: iphone ios objective-c nsurlconnection

我想从某个服务器下载一些文件。下载文件在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];
 }

问题

为什么这三个功能不起作用?它永远不会打电话。

我该如何解决?

2 个答案:

答案 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

在实例化连接后立即调用。