在 iOS 中上传时出现 NSOperationQueue(ASINetworkQueue) 问题

Posted

技术标签:

【中文标题】在 iOS 中上传时出现 NSOperationQueue(ASINetworkQueue) 问题【英文标题】:NSOperationQueue(ASINetworkQueue) issue while uploading in iOS 【发布时间】:2015-03-09 13:22:40 【问题描述】:

使用 NSOperationQueue 将多个文件上传到服务器。

//B类

同时将多个文件上传到服务器时移动到 popviewcontroller(A 类)。应用突然崩溃。 有什么方法可以不间断地将文件上传到服务器。

提前致谢

//B类

-(void)UploadtoS3

    // Convert file to data from locapathfile here
    NSData* imgData = [NSData dataWithContentsOfFile:localFilePath]; //VIDEO FILEPATH OR IMAGEPATH

    if(![self upload_NetworkQueue]) // If Queue is not initialized
    
        [[self upload_NetworkQueue] cancelAllOperations];
        [self setUpload_NetworkQueue:[ASINetworkQueue queue]];
        [[self upload_NetworkQueue] setDelegate:self];
        [[self upload_NetworkQueue] setRequestDidFailSelector:@selector(upload_RequestFailed:)];
        [[self upload_NetworkQueue] setQueueDidFinishSelector:@selector(upload_RequestDone:)];
        [[self upload_NetworkQueue] setShowAccurateProgress:YES];
        [[self upload_NetworkQueue] setMaxConcurrentOperationCount:1];
    

    NSString *s3keyPath = [NSString stringWithFormat:@"/test123/%@",fileName];
    NSLog(@"UPLOAD IMAGE S3 FILE NAME -----------  %@",s3keyPath);
    request = [ASIS3ObjectRequest PUTRequestForData:imgData withBucket:testBuck key:s3keyPath];
    [request setSecretAccessKey:s3SecretKey];
    [request setAccessKey:s3AccessKey];
    [request setTimeOutSeconds:20];
    [request setDelegate:self];
    [request setNumberOfTimesToRetryOnTimeout:3];
    [request setMimeType:mimeType];
    [request setUploadProgressDelegate:self];
    [[self upload_NetworkQueue] addOperation:request];
    [[self upload_NetworkQueue] go];

【问题讨论】:

使用 AFNetworking 作为您正在使用的库已被弃用 感谢您的帮助,还有其他方法解决吗? 【参考方案1】:

正如另一张海报所建议的,您应该远离 ASI 的代码。它不再受支持。

不过,至于你的问题。我的猜测是您发布的代码在视图控制器中。 (您的帖子中的 B 类)您将视图控制器设置为网络类的代表。

然后,您将从启动下载的视图控制器弹出到另一个视图控制器。这会导致请求上传的视图控制器被释放。因此,当下载队列尝试向其委托发送通知时,您会崩溃。

一般来说,您不应该让视图控制器管理应用程序的全局内容,例如下载。最好创建一个为您管理下载的单例类。如果您不熟悉单例设计模式,请进行谷歌搜索。网上有很多教程解释了如何在 ios/Objective-C 中设置单例。

【讨论】:

以上是关于在 iOS 中上传时出现 NSOperationQueue(ASINetworkQueue) 问题的主要内容,如果未能解决你的问题,请参考以下文章

iOS:在应用内购买中上传托管内容时出现问题 (ITMS-4200)

仅在 iOS 移动 Safari 中上传图像时出现错误的 CORS 失败

iOS打包上传时出现错误ITMS-90717

将 iOS 版本上传到应用中心时出现 icloud 授权错误

上传到 iOS 应用商店时出现错误“您的二进制文件无效”

ionic v3 build IOS 上传到应用商店时出现“UIWebView”错误