首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从后台线程下载时未调用的可可下载文件回调,适用于主线程。

从后台线程下载时未调用的可可下载文件回调,适用于主线程。
EN

Stack Overflow用户
提问于 2013-07-14 10:41:19
回答 1查看 177关注 0票数 0

我是可可编程新手,我正在尝试从url下载二进制文件到磁盘。不幸的是,由于某些原因,这些方法没有被调用。对downloadFile的调用是由后台线程通过self performSelectorOnBackground等启动的。有什么想法我做错了什么?

注意:当我从主UI线程调用downloadFile时,它似乎正常工作,后台线程是怎么回事?

代码语言:javascript
复制
-(BOOL) downloadFile
{
        BOOL downloadStarted = NO;
        // Create the request.
    NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:versionLocation]
                cachePolicy:NSURLRequestUseProtocolCachePolicy
                timeoutInterval:60.0];

    // Create the connection with the request and start loading the data.
        NSURLDownload  *theDownload = [[NSURLDownload alloc] initWithRequest:theRequest
                                                                                                                                delegate:self];
    if (theDownload) {
        // Set the destination file.
        [theDownload setDestination:@"/tmp" allowOverwrite:YES];
                downloadStarted = YES;
    } else {
        // inform the user that the download failed.
                downloadStarted = NO;
    }

        return downloadStarted;

}


- (void)download:(NSURLDownload *)download didFailWithError:(NSError *)error
{
    // Release the connection.
    [download release];

    // Inform the user.
    NSLog(@"Download failed! Error - %@ %@",
          [error localizedDescription],
          [[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]);
}

- (void)downloadDidFinish:(NSURLDownload *)download
{
    // Release the connection.
    [download release];

    // Do something with the data.
    NSLog(@"%@",@"downloadDidFinish");
}
EN

回答 1

Stack Overflow用户

发布于 2013-07-15 05:33:25

我认为您应该启动连接NSURLDownload对象的run循环。默认情况下,它将使用当前线程的run循环,因此您可能应该在初始化NSURLDownload对象之后执行类似的操作:

代码语言:javascript
复制
NSRunLoop* runLoop = [NSRunLoop currentRunLoop];
while (!self.downloaded && !self.error && [runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]])
        ;

属性self.downloaded和self.error应该在回调中设置。

在主线程中,运行循环可能是由NSApplication对象启动的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17638644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档