热门标签 | 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!


推荐阅读
  • 电子与正电子的相互作用
    本文探讨了电子与正电子之间的基本物理特性及其在现代物理学中的应用,包括它们的产生、湮灭过程以及在粒子加速器和宇宙射线中的表现。 ... [详细]
  • Oracle中打开10046Trace的各种方法10046trace的跟踪等级10046是一个Oracle的内部事件(event),通过设置这个事件可以得到Oracl ... [详细]
  • 本文详细介绍了 Go 语言的关键特性和编程理念,包括其强大的并发处理能力、简洁的语法设计以及高效的开发效率。 ... [详细]
  • 本文旨在探讨计算机机房的有效管理与维护方法,包括合理的机房布局设计、高效的操作系统安装与恢复技术以及数据保护措施。随着信息技术教育的发展,计算机机房作为教学的重要组成部分,其稳定性和安全性直接影响到教学质量。文章分析了当前机房管理中存在的问题,并提出了针对性的解决方案。 ... [详细]
  • Hibernate入门指南:单表数据库操作详解
    本文介绍了Hibernate作为全面的ORM框架的基础知识,并详细讲解了在MyEclipse环境中配置Hibernate以及进行基本的数据库单表操作的方法,包括增删改查等常见操作。 ... [详细]
  • PyQt5中进度条(QProgressBar)的使用指南
    本文介绍了如何在PyQt5中使用进度条(QProgressBar)来展示任务的完成情况。包括初始化进度条、设置其最大最小值以及更新进度的方法。 ... [详细]
  • 优化Nginx中PHP-FPM模块配置以提升性能
    通过调整Nginx与PHP-FPM之间的配置,可以显著提高Web服务器处理PHP请求的速度和效率。本文将详细介绍如何针对不同的应用场景优化PHP-FPM的各项关键参数。 ... [详细]
  • TunnelWarfareTimeLimit:1000MS MemoryLimit:131072KTotalSubmissions:7307 ... [详细]
  • 正在学习操作系统开发,遇到一个内核在GRUB Legacy(0.97)中无法成功引导的问题。具体表现为输入内核命令后显示错误信息,尝试引导时GRUB挂起。 ... [详细]
  • 本文探讨了在使用 ClickOnce 部署方式时遇到的自动更新失败问题,包括本地安装与服务器安装的不同表现,并提供了详细的解决方案。 ... [详细]
  • 本文详细介绍了MySQL表分区的概念、类型及其在实际应用中的实施方法,特别是针对Zabbix数据库的优化策略。 ... [详细]
  • 图神经网络模型综述
    本文综述了图神经网络(Graph Neural Networks, GNN)的发展,从传统的数据存储模型转向图和动态模型,探讨了模型中的显性和隐性结构,并详细介绍了GNN的关键组件及其应用。 ... [详细]
  • 在现代移动应用开发中,尤其是iOS应用,处理来自服务器的JSON数据是一项基本技能。无论是使用Swift还是PHP,有效地解析和利用JSON数据对于提升用户体验至关重要。本文将探讨如何在Swift中优雅地处理JSON,以及PHP中处理JSON的一些技巧。 ... [详细]
  • 本文将指导你如何通过自定义配置,使 Windows Terminal 中的 PowerShell 7 更加高效且美观。我们将移除默认的广告和提示符,设置快捷键,并添加实用的别名和功能。 ... [详细]
  • ECharts图表绘制函数集
    本文档提供了使用ECharts库创建柱状图、饼图和双折线图的JavaScript函数。每个函数都详细列出了参数说明,并通过示例展示了如何调用这些函数以生成不同类型的图表。 ... [详细]
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社区 版权所有