- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我是 iOS 开发新手。我正在编写一个允许用户读取/写入核心数据记录的 iOS 应用程序。这些记录将通过 http 同步到服务器。我有一组链式(串行)NSOperations 在执行同步的后台线程中运行。
用户可以在同步运行的同时读/写。我的计划是在应用程序中使用两个 managedObjectContext(都使用相同的 persistentStoreCoordinator),一个用于前台,一个用于后台。
我的 NSOperations 创建的所有后台线程都将连续运行,并将使用后台 MOC。所有基于 UI 的东西都将使用前台 MOC。
我的问题是:这是可接受的 iOS 核心数据模式吗?我可以愉快地在这两个 MOC 中对同一模型数据库进行读/写操作,而不必担心锁定和并发问题吗?
非常感谢。
最佳答案
这是一种常见的核心数据模式,框架旨在适应这种模式。
如果您自己管理线程,则需要使用一种称为“线程限制”的技术,您可以在标题为“核心数据并发”部分的文档中阅读更多相关信息。
除了线程限制之外,iOS 5.0 中还有一些旨在帮助管理并发性的新功能。 NSManagedObjectContext
现在可以配置为 NSManagedObjectContextConcurrencyType
。您可以在 NSMainQueueConcurrencyType
和 NSPrivateQueueConcurrencyType
之间进行选择。
具有 NSMainQueueConcurrencyType
的上下文在主线程上运行,可用于为 UI 提供服务。具有 NSPrivateQueueConcurrencyType
的上下文用于后台任务。
要使用私有(private)上下文,您可以通过 performBlock:
和 performBlockAndWait:
方法与它交互,以确保您的代码在正确的线程上执行。要使用主队列上下文,您可以正常与其交互,或者如果您的代码未在主线程上运行,则可以使用 block 方法。
文档中没有详细讨论这些新功能,“iOS v5.0 核心数据发行说明”部分提供了一些信息。然而,WWDC 2012 session 视频中有更深刻的讨论:“ session 214 - 核心数据最佳实践”。
关于ios - 前台和后台线程的不同 ManagedObjectContexts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11580421/
因此,我有 CoreData 实体 Book、Bookmark、Highlight。一本书包含关于这本书的信息和一个 Bookmarks 的 NSSet。 我想删除一本书中的书签,然后立即用我的集合重
(如果这个问题有点令人困惑/不精确,我很抱歉。我只是在学习高级 CoreData 用法,我不太了解术语和其他东西)。 我有一个单例 Game,它包含您在游戏过程中需要的某些数据。例如,您可以从那里访问
我有一个基本的 SwiftUI 应用程序,它初始化了 NSPersistentCloudKitContainer在应用程序启动时基于持久堆栈并将 viewContext 注入(inject)环境并将其
我正在将 Core Data 集成到不是使用 Core Data 模板创建的应用程序中。我对此有疑问,可能有一个非常简单的答案。然而,由于大多数关于这个主题的教程都是针对使用模板的,所以我很难过。 我
多个 ManagedObjectContext (MOC) 如何在核心数据中工作(Swift 2、iOS 9)。我浏览了很多在线链接和 Material 以及 StackOverflow 上的答案,但
我正在尝试创建一个新的核心数据对象,并用某个 View 的 subview 的一些信息填充它。 (只是为了用 template_control 对象填充数组) 有什么问题?该对象无法保存,但稍后当我对
我有两个 ManagedObjectContext(MOC):一个临时MOC 和一个持久MOC。如果我在 tempMOC 中初始化一个实体并且用户决定保存,我将保存更改并将更改合并到 persiste
我正在尝试学习核心数据,但在将新对象添加到现有对象后更新 MOC 时遇到问题。我可以创建原始对象(训练日),并且可以将练习对象添加到该训练日,但我不知道如何保存上下文,以便稍后在我的应用程序中可以找到
非常需要建议,目前没有想法。我与核心数据并发相关的问题叠加在一起,调试我使用 -"com.apple.CoreData.ConcurrencyDebug"和我所拥有的: 堆栈: 线程 3 队列:cor
我正在按照教程开发 iOS 应用程序。我正在使用核心数据。应用程序的第一个 View 是 RootViewController。所有核心数据堆栈都在 AppDelegate 文件中。这是 AppDel
我目前正在开发一个发出 HTTP 请求(通过 AsiHTTPRequest)然后解析 JSON 流的应用程序。基本上有一个 tableView/NSFetchedResultsController,它
我有一个应用程序,它使用 CoreData 使用 MPMediaPicker 保存不同的播放列表。保存第一个后,当我尝试添加第二个时,应用程序崩溃了。下面是整个调试队列。 创建第一条记录。 music
如何管理临时保存的 CoreData?一旦我做了这样的事情: var myClass: MyClass = NSEntityDescription.insertNewObjectForEntityFo
在我正在开发的应用程序中,我需要同时访问和写入核心数据。我已经能够收集到这意味着我需要使用多个 managedObjectContexts,但我不明白我应该如何设置这两个 managedObjectC
我是 iOS 开发新手。我正在编写一个允许用户读取/写入核心数据记录的 iOS 应用程序。这些记录将通过 http 同步到服务器。我有一组链式(串行)NSOperations 在执行同步的后台线程中运
我正在尝试将核心数据添加到现有项目中。我有: 1) 添加了核心数据框架2)将访问器和属性添加到 AppDelegate3)创建数据模型文件 现在当我尝试调用NSManagedObjectContext
我想使用单例 UIApplication 来访问 AppDelegate 的 managedObjectContext。但是当我写 [[[UIApplication sharedApplication
在我的 iOS 应用程序中,我有一个核心数据,我注意到有时在特定 View 中,当我从核心数据中检索信息时,并不总是最新的,我解释得很好: 如果我更新核心数据中的一些值,然后进入特定 View 查看此
我在 iPhone 上的核心数据项目遇到问题。当用户开始添加对象,然后在此过程中取消时,就会发生这种情况。 如果用户点击取消并返回到对象列表,则会在那里列出一个虚拟对象,代表他们正在创建的对象。这永远
我有两个实体,我将它们建模为类和核心数据模型实体/这些类如下所示: 类:StateManager #import #import #import "StateManager.h" #import
我是一名优秀的程序员,十分优秀!