1

当您在我的应用程序中创建/更新/删除记录时,它会OutgoingRequest在 Core Data 中创建一个记录。应用程序会定期将这些请求放入队列中,并将它们全部推送到服务器。我使用 AFHTTPClient 帖子(见下文)来做到这一点。我遇到的问题是它一次将所有这些请求向上推送,然后响应以没有真正的顺序返回。

我需要做的是使这些请求“同步”工作,因为在请求 A 完成(成功或失败响应)之前不应发布请求B。这也是在后台完成的,不应挂起 UI。

for(OutgoingRequest *req in queue)
{
    NSURL *reqUrl = [NSURL URLWithString: globals.baseURL];
    AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:reqUrl];
    [httpClient setParameterEncoding:AFJSONParameterEncoding];

    NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
                            req.url, @"viewName",
                            req.json, @"JSON",
                            req.dateAdded.description, @"dateTime",
                            nil];

    NSString *path = [NSString stringWithFormat:@"cache/update/?deviceUID=%@&token=%@", [MySingleton getMacAddress],  globals.token];

    [httpClient postPath:path parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {

            //handle the repsonse

        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

    }];
}

有没有办法用我目前的设置来实现这一点?或者我应该使用其他方式发布到我的服务器?

谢谢

4

2 回答 2

1

可能这里最好的想法是使用AFHTTPRequestOperation(或其中一个子类)并在它们之间创建依赖关系:2 op。取决于 1 操作,3 操作。取决于 2 操作。等等...

请查看文档(是 的子类AFNetworking)。NSOperationAFHTTPRequestOperationNSOperation

于 2013-11-01T15:28:11.667 回答
1

我建议您查看管理的NSOperationQueue内部AFHTTPClient。您可以将其设置maxConcurrentOperationCount为 1 以使其成为串行队列,因此您的请求将按照您将它们添加到队列中的顺序一次执行一个。

这是operationQueueAFHTTPClient 上的只读属性。

/**
The operation queue which manages operations enqueued by the HTTP client.
*/
@property (readonly, nonatomic, strong) NSOperationQueue *operationQueue;

无论您在哪里进行客户端设置,都将并发操作计数设置为 1。

myHTTPClient.operationQueue.maxConcurrentOperationCount = 1;

对于网络请求,串行队列可能是个好主意。归根结底,并发请求的数量仍然受到服务器可以打开的 HTTP 连接数量和设备天线带宽的限制,这两者都有上限。

于 2013-11-01T16:57:30.550 回答