2012-08-09 87 views
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?

回答

0

您是否考慮將所有AFRequestOperations添加到NSOperationQueue以保留它們?

+0

上傳管理器單例有屬性NSOperationQueue。所有新創建的上傳對象都將其操作添加到該操作隊列中。 – Nikita 2012-08-09 11:45:10

+0

您是否嘗試將'maxConcurrentOperationCount'設置爲1僅用於測試目的?我的猜測是你在某種奇怪的操作僵局中。 – 2012-08-09 11:47:51

+0

我已經嘗試過了。相同的故事。我認爲這個問題不在操作對象中。因爲它在創建新的AFHTTPClient對象(在__block AFMultipartFormData * formData = [[[AFMultipartFormData alloc] initWithURLRequest:request stringEncoding:self.stringEncoding] autorelease];之後立即發生)在創建新操作對象之前。 – Nikita 2012-08-09 11:54:50