繁体   English   中英

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

[英]NSOperationQueue(ASINetworkQueue) issue while uploading in iOS

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

// Class B

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

提前致谢

// Class 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];
}

正如其他提示所建议的那样,您应该远离ASI的代码。 不再受支持。

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

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

通常,您不应让视图控制器来管理应用程序的全局性内容,例如下载。 最好创建一个单例类来为您管理下载。 如果您不熟悉单例设计模式,请执行Google搜索。 在线上有很多教程介绍如何在iOS / Objective-C中设置单例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM