问题标签 [nspersistentstore]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
137 浏览

objective-c - 处理持久存储加载失败的策略

Apple 示例代码中处理加载持久性存储中的任何错误的默认策略是记录错误并保释。总是有一个解释(在评论中)你应该做一些对用户更友好的事情:

是否有任何示例代码可以更好地处理无法加载持久存储的问题?有没有人建议比仅仅记录错误更好的策略?

将旧存储存档,然后给用户一个新存储会更好吗(带有消息说明发生了什么)

0 投票
1 回答
492 浏览

ios - 核心数据在 iOS 4.3 中不起作用

我的核心数据有问题。它在 iOS 5.0 和更高版本中运行很好,但是当我在 iOS 4.3 中运行它时它崩溃了,它就在线崩溃了__managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];有人可以帮助我吗?

0 投票
1 回答
126 浏览

objective-c - CoreData 持久存储出错

我正在使用基于 CoreData 的应用程序,并且有一个 AppDelegate 类,该类本质上是在启动应用程序时编写的。

单击按钮后,我将 ArrayController(Section1) 传递给子类并对其进行解析以存储 TableView Cell 值。

最初它运行良好,但是,现在我收到此错误:

用于打开持久存储的托管对象模型版本与用于创建持久存储的版本不兼容。

有没有人遇到过这个错误?有什么建议么?谢谢。

0 投票
1 回答
649 浏览

ios - 使用 UIManagedDocument 预加载核心数据数据库

嗨支持专家...我正在编写我的第一个 iPad 应用程序,并且有一个可以解析 XML 文件以UIManagedDocument在应用程序启动时创建核心数据数据库的工作测试版副本。但是,这需要很长时间,我想在离线后完成,并将初始数据直接包含到我的应用程序包中。毋庸置疑,我正在尝试让它发挥作用。

我首先遵循了命令行实用程序方法,请参见此处这一直有效,直到我导入 .sqlite 文件并尝试编辑该persistentStoreCoordinator方法-我使用的是 a ,因此在我UIManagedDocument的方法中没有方法-此页面引用“在某些情况下,您不必编写任何代码来加载模型。如果您在 Mac OS X 上使用基于文档的应用程序,它会为您管理查找和加载应用程序模型的任务。”persistenStoreCoordinatorAppDelegateNSPersistentDocument

然后,我尝试根据这个 StackOverFlow 问题UIManagedDocument从模拟器中的应用程序的工作版本中复制它, 这似乎有效,只是它是空的,因此我的表也是。这正是这里提出的问题,但对该问题的回答让我重新开始修改我没有的方法。persistentStoreNSPersistentStoreCoordinator

我在我的代码中添加了一个测试NSFetchRequest,我将我的应用程序包中的文件复制UIManagedDocument到了文档目录中 - 所以我知道UIManagedDocument我的应用程序包中的我是空的。我尝试从 finder 拖放并使用终端进行处理 - persistentStore 文件似乎已正确移动并且大小为 106 KB,但我的应用程序中仍然有一个空数据库。

关于如何让它工作的任何建议?

我是否需要configurePersistenStoreCoordinatorForURL:ofType:modleConfiguration:StoreOptions:error:按照UIManagedDocument类参考使用 - 如果需要,我该怎么做?

我是否需要将一些核心数据方法添加到我的 AppDelegate 中,以便我可以修改我的persistenStoreCoordinator方法 - 如果需要,此方法还需要做什么?

persistentStore UIManagedDocument我是更好地使用我的命令行实用程序创建的或似乎使用的 .sqlite 数据库吗?

0 投票
1 回答
132 浏览

objective-c - 如何使用自我模型创建单独的 sqlite 文件

我已经阅读了这篇包含多个 sqlite 文件和其他内容的 Core Data 文章。

但是,找不到任何有关创建分隔的 sqlite 文件的可理解信息(例如,为不同用户存储一些数据)。这就是我正在做的事情:

如果您更改用户也会更改NSPersistentStoreCoordinatorNSManagedObjectContextNSManagedObjectModel- 不是(那里NSFetchRequest)。那么如何在不创建额外实体(如用户)的情况下为不同用户分离核心数据(带有自身数据和“获取请求”)?

0 投票
1 回答
119 浏览

ios - 使用持久存储协调员?

我制作了一个主要基于表格视图控制器/表格视图的 iPad 应用程序。我从外部服务器上的 .csv 文件中获取它的内容。我需要将内容保存在设备上。所以我正在使用核心数据来实现这一点。我已经成功地使用托管对象和托管对象上下文来做到这一点。如果用户提供输入,对于新单元格,我将其存储在托管对象中。

但是,在完成所有这些之后,我再也不需要使用 Persistent Store Co-ordinators。好吧,也许我应该有,但我不知道如何或为什么要使用它们。

对此有一点启发会很棒!

编辑:所以我的问题是,核心数据需要持久存储协调器吗?它们是用来做什么的?

谢谢!

0 投票
1 回答
473 浏览

core-data - 新项目新模型 NSPersistentDocument 这个 NSPersistentStoreCoordinator 没有持久存储

我一直在搜索 stackoverflow 和谷歌搜索几个小时。我做了一个简单的项目来处理 Core Data 和绑定。它在模型中添加了一个实体,但它不再工作了。每当我尝试将数据添加到新文档时,我都会收到“此 NSPersistentStoreCoordinator 没有持久存储它无法执行保存操作”。我遵循了我能找到的每一条建议,但没有运气。

最后,我制作了一个新项目(基于 NSPersistentDocument),并从头开始制作了一个新模型。在我第一次运行项目之前,我确保模型是完美的。

在WindowControllerDidLoadNib中:项目调用方法添加数据。在 addData 例程之前,我记录了 ManagedObjectContext 和 ManagedObjectModel。它们都不是零。

我仍然得到这个 %$&#@! 错误。

有没有人对此有任何新的想法?

编辑:这可能是因为从未保存过新的无标题文档吗?如果是这样,你如何解决这个问题?您可以保存无标题的文档吗?你真的想要吗?

不久前我在文件导入时遇到了类似的问题。由于我拥有完全控制权,我命名并保存了文档,然后我能够保存上下文。

0 投票
3 回答
510 浏览

ios - 将核心数据对象保存在多个商店中

我正在使用 Core Data 开发一个 iOS 应用程序。我想让持久存储位于共享位置,例如网络驱动器,以便多个用户可以处理数据(在不同的时间,即并发不是问题的一部分)。

但我也想提供“离线”处理数据的能力,即通过在 iPad 上保留一个本地持久存储。到目前为止,我读到我可以通过使用持久存储协调器的迁移功能在某种程度上做到这一点,但这似乎意味着旧存储随后失效。此外,我不一定要移动整个商店“离线”,而只是移动其中的一部分:使用 Apple 提供的简单“公司部门”示例,我希望用户能够检查一个部门,同时与该部门关联的所有员工(以及与每个员工关联的所有属性)。然后,用户可以在他们的 iPad 上本地处理部门数据,一段时间后,将这些更改同步回服务器的持久存储。

因此,我需要将核心数据对象从一个存储复制到另一个存储,以及通过关系引用的所有对象。并且这个复制过程还需要确保如果目标持久存储中已经存在一个对象,它会被覆盖而不是添加到存储中的新对象(我已经为每个对象提供了一个 UID 出于另一个原因,所以我可能能够重新使用 UID)。

到目前为止,我所看到的似乎没有简单的方法来同步或复制 Core Data 持久存储,这是一个公平的评估吗?

那么我真的需要编写一段代码来执行以下操作:

  • 通过 MOC 检索对象“A”
  • 在所有实体中检索与对象“A”有关系的所有对象
  • 为目标持久存储实例化一个新的 MOC
  • 对于检索到的每个对象,检查目标存储是否存在该对象
  • 如果对象存在,则使用在步骤 1 和 2 中检索到的对象的属性覆盖它
  • 如果对象不存在,则创建它并根据在步骤 1 和 2 中检索到的对象设置所有属性

虽然这不是世界上最复杂的事情,但我仍然认为“在线/离线编辑”的这种要求足够普遍,以至于某些标准功能可用于同步部分持久性存储?

非常感谢您的观点,谢谢,da_h-man

0 投票
2 回答
659 浏览

core-data - 将 Core Data 持久存储 (SQLite) 设置为 NORMAL 锁定模式

我正在构建一个应用程序原型,其中持久存储通过 AFP 在“服务器”机器(同一个 LAN)上使用 SQLite。但是,我无法从我的应用程序的 2 个不同实例连接到商店。

我在持久存储协调器上设置了 SQLite pragma 设置(与锁定相关),如下所示:

我在尝试从第二个客户端连接到商店时收到的错误消息(即当第一个客户端已经成功连接时)是:

错误:sqlite 数据库被锁定,因为它正在被另一台主机使用,该主机在 .../TestDBApp.storedata 上持有主机独占锁;此主机 UID... 无法覆盖主机独占锁,直到另一个主机 UID... 释放其对 .../.TestDBApp.storedata-conch 的锁

难道我做错了什么?

使用 Core Data 和 SQLite 是否可以从 2 个客户端访问同一个商店?

这是 Core Data 和/或 SQLite API 中的错误吗?

0 投票
2 回答
88 浏览

core-data - 了解查询来自哪个持久存储

我尝试做的事情可能无法用 Core Data 完成,所以如果是这样,请告诉我。

我有一个 ManagedObjectContext 并且我通过 addPersistentStoreWithType 添加它们来引入 sqlite 数据库。. .

所以我将添加一些数据库 - 假设在 1 到 5 之间,然后我对数据库中的数据执行提取。太好了,我不必说我正在搜索哪些来源 - 结果刚刚回来,它们被合并在一起。

但是,如果我知道每个结果来自哪个 Store 怎么办?这甚至可能吗?我是不是想得太“老派”了,比如我想知道找到了哪些“文件”?

帮助/建议将不胜感激。

这是一些代码:

看,上面我有一个 PMBEntity,它是我通过 XCode 创建的核心数据 NSManagedObjectModel。如您所知,(众多)字段之一是“名称”。在这里,我正在搜索所有唯一名称并按名称排序。

返回给我的是这些 PMBEntity 对象的 NSArray。