1

我有一个具有五个离散 TabController 的应用程序。每个 TabController 都会做一些工作并将结果提交给服务器。
您能否就如何使用串行队列异步提交数据给我建议?

我应该有一个单身人士吗UploadsService,它有一个dispatch_queue_t uploadsQueue引用,五个 TabController 中的每一个都可以访问和提交工作块吗?

或者我应该有五个串行队列(每个 TabController 一个)存在于每个 TabBarController 中,并让每个 TabController 使用自己的串行队列单独提交到服务器?

我试图模拟的是一种“提交并忘记它”的方法。用户只需在五个 TabController 之间轻松移动,频繁地向服务器提交结果。提交每个任务可能需要 20 秒左右。我设想了一个集中式串行队列来防止并发问题,但我想知道是否需要创建一个单例类,其唯一目的只是容纳一个集中式串行队列。

谢谢!

4

1 回答 1

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];
于 2013-05-13T22:03:04.997 回答