热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在从SQLiteDB中删除之前等待API响应-WaitingonAPIresponsebeforedeletingfromSQLiteDB

IamhavingtroublecomingupwithanefficientwayofdeletinginformationfromaSQLiteDBaftera

I am having trouble coming up with an efficient way of deleting information from a SQLite DB after a JSON response.

在JSON响应之后,我无法想出一种从SQLite DB中删除信息的有效方法。

Basically how what I am trying to do is:

基本上我要做的是:

I have a DB with 100 records.

我有一个有100条记录的数据库。

  1. I read the first record
  2. 我读了第一张唱片
  3. Build a JSON package and send it to my API.
  4. 构建一个JSON包并将其发送到我的API。
  5. WAIT for the API to respond Ok or Fail
  6. 等待API响应Ok或Fail
  7. The delete the record from the DB on OK.
  8. 确定从DB中删除记录。
  9. Move to the next record.
  10. 移至下一条记录。

There is some time between waiting on a response before I can delete and go on.

在我可以删除和继续之前等待响应之间有一段时间。

enter image description here

A simple FOR doesn't seem to work as it can't wait for the 'OK' from the API.

一个简单的FOR似乎不起作用,因为它不能等待来自API的'OK'。

I looked into dispatch_async(dispatch_get_main_queue()); but if the OK comes and the DB is processing it will lock the DB while it is being accessed and the logic fails because the db is locked.

我查看了dispatch_async(dispatch_get_main_queue());但是如果确定来了并且数据库正在处理它将在访问数据库时锁定数据库并且逻辑因数据库被锁定而失败。

I need a mixture of the two. Does anyone know of a tutorial or where to start with something like this?

我需要两者的混合物。有没有人知道一个教程或从哪里开始这样的事情?

3 个解决方案

#1


1  

Use an operation queue and your own custom operation. Setup the operation queue to be serial or set it to allow some small number of concurrent operations.

使用操作队列和您自己的自定义操作。将操作队列设置为串行或将其设置为允许少量并发操作。

Loop through each record creating an operation for each record. Put each operation on the queue.

遍历每条记录,为每条记录创建一个操作。将每个操作放在队列中。

The implementation of the operation will be to make the API call and then delete the one record if that API call indicates it should be deleted. Ensure that the operation's main doesn't reach its end until the API call is complete.

该操作的实现将是进行API调用,然后如果该API调用指示应删除该记录,则删除该记录。确保在API调用完成之前,操作的main不会到达终点。

#2


0  

Create an array where you will hold temporarily your data to delete

创建一个数组,暂时保存要删除的数据

NSMutableArray* itemsToDelete = [[NSMutableArray alloc] init] 

Once you received a response with success you append the items to be deleted to this array. do the same process in all calls with success. once your done with uploading your data at your last response of success or failure check your itemsToDelete array inside a for loop and delete everything from your DB

收到成功的响应后,将要删除的项目附加到此数组。在所有呼叫中成功执行相同的过程。完成上次成功或失败响应后上传数据后,检查for循环中的itemsToDelete数组并删除数据库中的所有内容

#3


0  

I suggest using blocks to receive the response from async calls. In that case, you can perform the DB operation within the block.

我建议使用块来接收来自异步调用的响应。在这种情况下,您可以在块中执行DB操作。

dispatch_async(dispatch_get_main_queue()); is not for the async calls. It is mostly used to update the UI.

dispatch_async(dispatch_get_main_queue());不适用于异步调用。它主要用于更新UI。

All the async calls needs to be done on background thread.

所有异步调用都需要在后台线程上完成。

Coming to your problem, you can do something like this:

来你的问题,你可以做这样的事情:

-(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 

And finally you can use a for loop on responseArray, to delete the unwanted objects.

最后,您可以在responseArray上使用for循环来删除不需要的对象。

You can also limit the number of concurrent calls by using :

您还可以使用以下命令限制并发呼叫的数量:

dispatch_semaphore_create(maxConcurrencyValue)

Or you can use NSOperation as suggested by rmaddy!

或者你可以按照rmaddy的建议使用NSOperation!


推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • Android和iOS的数据库都是用SQLite来实现.一,SQLite数据库简介:轻量级:SQLite数据库是一个轻量级的数据库,适用于少量数据的CURD;文件本质:SQL ... [详细]
  • 在Android Studio中查看SQLite数据库
    原来查看数据库内容,我们一般都是将数据库文件从手机导出,再用专门的软件打开查看,比较繁琐。最近发现了一个比较方便的方法:使用工具stetho。使用方式在gradle中配置depen ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • Iamcopyingapre-existingdatabasetodatadatapackagenamedatabasesusingcodelearnedfromusi ... [详细]
  • SQLite3是一个广泛使用的数据库,从linux,windows到安卓都有SQLite的应用。本文介绍SQLite3在windows上的编译。SQLite3提供了多种源代码的下载 ... [详细]
author-avatar
季孙意如
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有