1

我想将一些数据发送到接受 POST 数据的 Web 服务。

但是,如果互联网连接断开,那么我需要对数据进行排队。即缓存它并在下一个可用的机会发送它。

是否有任何 iOS 库可以帮助解决这个问题?

目前我正计划使用 ASIFormDataRequest 来执行此操作,如果失败,则使用 NSUserDefaults 存储数据。然后,我假设我需要通过以下方式在后台完成该过程:

  • 使用 NSOperation 查找连接,该连接使用 NSNotification 标记连接
  • 从 NSUserDefaults 读取数据
  • 发送此数据
  • 从 NSUserDefaults 中删除数据

看起来工作量不大,但我是在这里重新发明轮子还是这是最好的方法?

4

2 回答 2

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]];
}

这一切都是在我自己的“API”对象中完成的,该对象包含对 Web 服务的所有调用,因此我调用startSynchronous而不是异步调用,因为我无论如何都在不同的线程中处理它。

于 2012-07-13T10:01:42.523 回答
0

请查看 Github 上的 AFNetworking 框架,这可能是您正在寻找的:https ://github.com/AFNetworking/AFNetworking

于 2012-07-13T09:58:09.767 回答