1

5 つの個別の TabControllers を持つアプリがあります。各 TabController はいくつかの作業を行い、結果をサーバーに送信します。
シリアル キューを使用してデータを非同期に送信する方法についてアドバイスをお願いします。

5 つの TabControllers のそれぞれがアクセスして作業ブロックを送信するUploadsService1 つの参照を持つsingleton を 1 つ持つ必要がありますか?dispatch_queue_t uploadsQueue

または、各 TabBarController 内に存在する 5 つのシリアル キュー (TabController ごとに 1 つ) を用意し、各 TabController が独自のシリアル キューを使用してサーバーに個別に送信できるようにする必要がありますか?

私がシミュレートしようとしているのは、「提出して忘れる」アプローチです。ユーザーは 5 つの TabController 間を簡単に移動し、結果を頻繁にサーバーに送信します。各タスクの送信には 20 秒程度かかる場合があります。同時実行の問題を防ぐために 1 つの集中型シリアル キューを想定しましたが、1 つの集中型シリアル キューを格納することのみを目的とするシングルトン クラスを作成する必要があるかどうか疑問に思っています。

ありがとう!

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 に答える