我无法在JSON响应后找到一种从SQLite DB中删除信息的有效方法。
基本上我要做的是:
我有一个包含100条记录的数据库。
答案 0 :(得分:1)
使用操作队列和您自己的自定义操作。将操作队列设置为串行或将其设置为允许少量并发操作。
遍历每条记录,为每条记录创建一个操作。将每个操作放在队列中。
该操作的实现将是进行API调用,然后删除一条记录,如果该API调用表明它应该被删除。确保在API调用完成之前,操作main
未到达终点。
答案 1 :(得分:0)
创建一个数组,暂时保存要删除的数据
-adfaa123sdfasdf
成功收到回复后,您可以将要删除的项目附加到此数组中。在所有呼叫中成功执行相同的过程。完成上次成功或失败响应后上传数据后,在for循环中检查itemsToDelete数组并删除数据库中的所有内容
答案 2 :(得分:0)
我建议使用块来接收来自异步调用的响应。在这种情况下,您可以在块中执行DB操作。
dispatch_async(dispatch_get_main_queue());
不适用于异步调用。它主要用于更新UI。
所有异步调用都需要在后台线程上完成。
遇到你的问题,你可以这样做:
-(void)checkToDeleteWithCompletion:(MyCompletion)completion{
__block NSMutableArray *responseArray = [NSMutableArray array];
// Create a dispatch group
dispatch_group_t group = dispatch_group_create();
for (int i = 0; i < yourArray.count; i++) {
// Enter the group for each request we create
dispatch_group_enter(group);
[self ..methodToPErformAsynccallWithCOmpleton success:^(BOOL success, id response) {
dispatch_group_leave(group);
[responseArray addObject:response];
} failure:^(NSError *error, NSInteger statusCode) {
dispatch_group_leave(group);
}];
}
// Here we wait for all the requests to finish
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
// Do whatever you need to do when all requests are finished
completion(YES,[responseArray copy]);
});
}
最后,您可以在responseArray上使用for循环来删除不需要的对象。
您还可以使用以下方法限制并发呼叫数:
dispatch_semaphore_create(maxConcurrencyValue)
或者你可以按照rmaddy的建议使用NSOperation!