1

POSTデータを取得するWebサービスにデータを送信したいと思います。

ただし、インターネット接続が切断された場合は、データをキューに入れる必要があります。つまり、キャッシュして、次に利用可能な機会に送信します。

これに役立つ可能性のあるiOSライブラリはありますか?

現時点では、ASIFormDataRequestを使用してこれを実行することを計画しており、それが失敗した場合は、NSUserDefaultsを使用してデータを保存します。次に、次の方法でバックグラウンドでプロセスを完了する必要があると思います。

  • NSNotificationとの接続にフラグを立てるNSOperationを使用して接続を探します
  • NSUserDefaultsからデータを読み取ります
  • このデータを送信する
  • NSUserDefaultsからデータを削除します

膨大な作業のようには思えませんが、ここで車輪の再発明を行っているのでしょうか、それともこれが最善の方法ですか?

4

2 に答える 2

0

Github で AFNetworking Framework をご覧ください。これが探しているものかもしれません: https://github.com/AFNetworking/AFNetworking

于 2012-07-13T09:58:09.767 に答える
0

私は通常、ASIFormDataRequest を使用することになり、NSThread を使用して呼び出し用の新しいスレッドも切り離します。完了したら、自分のデリゲート/プロトコルを呼び出すようにします。

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"some_url"]];
[request setUseKeychainPersistence:YES];
[request addRequestHeader:@"Content-Type" value:@"application/json"];
for (NSString *key in dictionary) {
    [request setPostValue:[dictionary objectForKey:key] forKey:key];
}
[request startSynchronous];
if([request responseStatusCode] == 200)
{
    NSString *response = [NSString stringWithFormat:@"%@", [request responseString]];
    if ([self _isValidDelegateForSelector:@selector(requestSucceeded)]) {
        [_delegate requestSucceeded];
    }
    if ([self _isValidDelegateForSelector:@selector(itemAdded:)]) {
        [_delegate itemAdded:[response JSONValue]];
    }
}
else {
    if ([self _isValidDelegateForSelector:@selector(requestFailedWithError:)])
        NSLog(@"%@", [request debugDescription]);
    [_delegate requestFailedWithError:[request error]];
}

これはすべて、Web サービスへのすべての呼び出しを含む独自の「API」オブジェクトで行われます。そのため、startSynchronousこれを別のスレッドで処理するため、非同期ではなく呼び出す必要があります。

于 2012-07-13T10:01:42.523 に答える