首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSURLSessionUploadTask“完成”但没有网络流量

NSURLSessionUploadTask“完成”但没有网络流量
EN

Stack Overflow用户
提问于 2015-05-04 14:36:50
回答 2查看 302关注 0票数 0

我有一个应用程序,可以上传几张保存在TSPhoto对象数组中的图片。

当我开始上传时,委托方法最终会触发来表示它已经完成了, ,但是这个应用程序从来没有击中服务器,而且仪器显示没有网络流量

代码语言:javascript
复制
_session = [self backgroundSession];

for(TSPhoto *photo in _picsetPhotos) {
    NSURL *uploadURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@upload", @"https://example.com/"]];
    NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:uploadURL];
    [req setHTTPMethod:@"POST"];

    NSLog(@"req dump: %@", req);

    //  Add it to the queue
    NSURLSessionUploadTask *uploadTask = [_session uploadTaskWithRequest:req fromFile:[NSURL fileURLWithPath:photo.fullImagePath]];

    //  "Start" it
    NSLog(@"Enqueueing %@", uploadTask);

    [uploadTask resume];
    NSLog(@"Post-resume");
}

-backgroundSession:

代码语言:javascript
复制
-(NSURLSession *)backgroundSession {
    static NSURLSession *session = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"TSBackgroundUploader"];

        configuration.HTTPMaximumConnectionsPerHost = 1;

        session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
    });

    return session;
}

我已经执行了所有适当的委托方法:

代码语言:javascript
复制
-(void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session {
    NSLog(@"Finished all uploads!");
    [[[UIAlertView alloc] initWithTitle:@"Upload Completed" message:@"Your album has been created." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil] show];
}

-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didSendBodyData:(int64_t)bytesSent totalBytesSent:(int64_t)totalBytesSent totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend {

    dispatch_async(dispatch_get_main_queue(), ^{
        [_uploadProgress setProgress:
         (double)totalBytesSent /
         (double)totalBytesExpectedToSend animated:YES];
    });
}

-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
    dispatch_async(dispatch_get_main_queue(), ^{
        [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];

        [_uploadProgress setProgress:0.5];

        //  Did we succeed?
        if(!error) {
            NSLog(@"Upload done");
        } else {
            NSLog(@"%@", error.description);
        }
    });

在所有这一切过程中,进度栏也表现得很不稳定,起起落落,直到最终达到100。

有什么线索吗?

编辑:在我添加了更多的NSLog语句之后,这里是日志。任务按启动时的相反顺序调用委托:

代码语言:javascript
复制
2015-05-04 09:55:42.492 TS[348:95052] Starting background upload
2015-05-04 09:55:42.493 TS[348:95052] req dump: <NSMutableURLRequest: 0x1740138b0> { URL: https://example.com/upload }
2015-05-04 09:55:42.512 TS[348:95052] Enqueueing <__NSCFBackgroundUploadTask: 0x155d804c0>{ taskIdentifier: 3 }
2015-05-04 09:55:42.513 TS[348:95052] Post-resume
2015-05-04 09:55:42.513 TS[348:95052] req dump: <NSMutableURLRequest: 0x17400de00> { URL: https://example.com/upload }
2015-05-04 09:55:42.524 TS[348:95052] Enqueueing <__NSCFBackgroundUploadTask: 0x155e68db0>{ taskIdentifier: 4 }
2015-05-04 09:55:42.525 TS[348:95052] Post-resume
2015-05-04 09:56:01.726 TS[348:95052] ID: 4
2015-05-04 09:56:01.726 TS[348:95052] Upload done
2015-05-04 09:56:02.920 TS[348:95052] ID: 3
2015-05-04 09:56:02.920 TS[348:95052] Upload done
EN

回答 2

Stack Overflow用户

发布于 2017-05-22 23:32:41

您看不到任何网络活动,因为后台会话在系统管理的单独守护进程上传输数据。

这是苹果文档的摘录:

“一旦配置好NSURLSession object ,您的就可以在适当的时候无缝地将任务上传和下载到系统上。如果任务在应用程序仍在运行时完成(无论是在前台还是后台),会话对象会按照通常的方式通知其委托。如果任务尚未完成,并且系统终止了您的应用程序,系统将自动继续管理后台中的任务。如果用户终止了您的应用程序,系统将取消所有挂起的任务。”

您可以在这里阅读更多内容:https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

票数 1
EN

Stack Overflow用户

发布于 2015-05-04 15:55:29

我的一部分感觉真的很愚蠢,而另一部分我真的很困惑。

原来数据是被发送的。我正在处理一个不完整的上传端点,当我完成实现端点时,图片通过的很好!

但是对于整个事务--上传10 KB的图片--调试器中显示的唯一网络流量是几KB,我在开始执行任务之前提出了一个较小的请求:

我想我会把这个放在“Xcode做的奇怪的狗屎”下面,然后继续前进。

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

https://stackoverflow.com/questions/30032900

复制
相关文章

相似问题

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