0
我正在處理某些應用的某些部分。這部分是文件上傳管理器。我已經實現了UploadManager類,它是單從NSObject的繼承並有方法:AFNetworking:上傳多個文件的問題
- (void)addNewUploadWithFileData:(NSData *)fileData
withThumbnailData:(NSData *)thumbnailData
withUserId:(int32_t)userId
withType:(UploadType)uploadType
withMediaType:(MediaType)mediaType
withDelegate:(id<UploadDelegate>)delegate;
此方法創建新的上載的對象。上傳對象是繼承自AFHTTPClient的BasicUpload類的子類之一。
所有這些實現的目的是允許多個文件上傳,控制它們和其他功能。
在我添加多次上傳相同文件的情況下,所有工作都完美無缺,所有上傳都是同時上傳的。 但是在場景中,當我添加一些要上傳的文件,然後添加一些其他較小的文件進行上傳時,此較小的文件會上傳,而其他文件則不會。
我檢查了一下,發生了什麼,並發現當我添加新的其他文件上傳時,創建新的請求(顯然),在創建之後,所有其他上載對象之前添加的被釋放(釋放)。 它發生在AFHTTPClient.m,在方法:
- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method
path:(NSString *)path
parameters:(NSDictionary *)parameters
constructingBodyWithBlock:(void (^)(id <AFMultipartFormData>formData))block
當它到達部分:
__block AFMultipartFormData *formData = [[[AFMultipartFormData alloc] initWithURLRequest:request stringEncoding:self.stringEncoding] autorelease];
,之前的所有上載的對象(其是AFHTTPClient的子類)之後被釋放。
我在做什麼錯?或者有可能是一些bug?
上傳管理器單例有屬性NSOperationQueue。所有新創建的上傳對象都將其操作添加到該操作隊列中。 – Nikita 2012-08-09 11:45:10
您是否嘗試將'maxConcurrentOperationCount'設置爲1僅用於測試目的?我的猜測是你在某種奇怪的操作僵局中。 – 2012-08-09 11:47:51
我已經嘗試過了。相同的故事。我認爲這個問題不在操作對象中。因爲它在創建新的AFHTTPClient對象(在__block AFMultipartFormData * formData = [[[AFMultipartFormData alloc] initWithURLRequest:request stringEncoding:self.stringEncoding] autorelease];之後立即發生)在創建新操作對象之前。 – Nikita 2012-08-09 11:54:50