使用NSOperationQueue将多个文件上传到服务器。
// B类
在将多个文件上传到服务器的同时转移到popviewcontroller(A类)。 App突然崩溃了。 有没有办法在没有中断的情况下将文件上传到服务器。
先谢谢
// 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];
}
答案 0 :(得分:0)
正如另一张海报建议的那样,你应该远离ASI的代码。它不再受支持。
关于你的问题。我的猜测是你发布的代码在视图控制器中。 (您的帖子中的B类)您正在将视图控制器设置为您的网络类的代表。
然后,您从启动下载的视图控制器弹出到另一个视图控制器。这会导致请求上载的视图控制器被释放。因此,当下载队列尝试向其委托发送通知时,您将崩溃。
通常,您不应该让视图控制器管理应用程序等全局内容,例如下载。最好创建一个单独的类来管理您的下载。如果您不熟悉单件设计模式,请进行谷歌搜索。在线有很多教程解释如何在iOS / Objective-C中设置单例。