我有一个有五个离散TabControllers的应用程序。每个TabController执行一些工作并将结果提交给服务器 您能否就如何使用串行队列异步提交数据给我建议?
我应该有一个单UploadsService
,其中有一个dispatch_queue_t uploadsQueue
引用,五个TabControllers中的每一个都会访问并提交工作块吗?
或者我应该在每个TabBarController中有五个串行队列(每个TabController一个)并让每个TabController使用自己的串行队列单独提交给服务器吗?
我想要模拟的是“提交并忘记它”的方法。用户只需在五个TabController之间轻松移动,就可以经常将结果提交给服务器。提交每项任务可能需要20秒左右。我设想了一个集中的串行队列来防止并发问题,但我想知道是否需要创建一个单例类,其唯一目的只是容纳一个集中的串行队列。
谢谢!
答案 0 :(得分:0)
我个人会使用其他人的辛勤工作(包括网络中断的所有边缘情况,应用程序后台处理等)。 MKNetworkKit为我解决了上述所有问题(排队等):
https://github.com/mugunthkumar/mknetworkkit
在app delegate中创建共享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];