2013-01-08 41 views
1

我有一個應用程序有五個離散的TabControllers。每個TabController執行一些工作並將結果提交給服務器。
你能否給我一些關於如何使用串行隊列異步提交數據的建議?iOS:創建後臺隊列上傳?

我是否應該有一個單身人士UploadsService,其中有一個dispatch_queue_t uploadsQueue引用,表示五個TabController中的每一個都訪問並提交工作塊?

或者我應該在每個TabBarController中有五個串行隊列(每個TabController一個),並讓每個TabController使用自己的串行隊列分別提交給服務器?

我試圖模擬的是「提交併忘記它」的方法。用戶只需在五個TabController之間輕鬆移動,並將結果經常提交給服務器。提交每個任務可能需要20秒左右的時間。我設想了一箇中央串行隊列來防範併發問題,但我想知道是否需要創建一個單一類,其唯一目的僅僅是容納一個集中式串行隊列。

謝謝!

回答

0

我會親自使用別人的努力工作(包括網絡中斷,應用背景等所有邊緣情況)。 MKNetworkKit解決上述所有(排隊等)對我來說:

https://github.com/mugunthkumar/mknetworkkit

在應用程序委託創建共享apiEngine:

_apiEngine = [[MKNetworkEngine alloc] initWithHostName:@"example.org" apiPath:@"/upload/textdetective/" customHeaderFields:nil]; 
[_apiEngine useCache]; 

然後在需要的地方:

MKNetworkEngine *engine = [delegate apiEngine]; 
NSString* bundle = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; 
NSString* version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; 
NSMutableDictionary *params = [[NSMutableDictionary alloc] init]; 
[params setValue:bundle forKey:@"bundle"]; 
[params setValue:version forKey:@"version"]; 
MKNetworkOperation *op = [engine operationWithPath:@"" params:params httpMethod:@"POST" ssl:YES]; 
[op setFreezable:YES]; 
[engine enqueueOperation:op];