问题标签 [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 投票
4 回答
5758 浏览

ios - 将 SQL 存储添加到 NSPersistentStoreCoordinator 时,如何调试/处理间歇性“授权被拒绝”和“磁盘 i/o”错误?

我在应用商店中有一个应用,并且正在使用日志服务来获取崩溃日志和相关的日志数据。我看到了间歇性崩溃(受影响的用户数量少,每个用户的崩溃数量少),但这让我感到困惑。

这些崩溃中发生的情况如下:

  1. 应用程序启动并初始化核心数据堆栈

  2. 应用程序尝试使用以下代码将 SQL 存储添加到 NSPersistentStoreCoordinator(storeURL有效):

    /li>
  3. 添加此商店时出现以下错误之一:

NS错误:

Domain=NSCocoaErrorDomain
Code=256 “操作无法完成。(Cocoa 错误 256。)”
UserInfo=0x1dd946a0 {NSUnderlyingException=授权被拒绝,NSSQLiteErrorDomain=23}

或者

NS错误:

Domain=NSCocoaErrorDomain
Code=256 “操作无法完成。(Cocoa 错误 256。)”
UserInfo=0xc6525d0 {NSUnderlyingException=磁盘 I/O 错误,NSSQLiteErrorDomain=10}

在这种情况下,应用程序将崩溃,因为应用程序需要 SQL 存储才能运行。我可以尝试通过尝试新的 storeURL 来优雅地处理此失败,但我不希望用户丢失现有数据。此外,我从未亲自重现过此问题,并且基于受影响的用户数量和崩溃日志的数量较少,我认为这是一个影响较小的问题,并且不会在后续应用启动时再次出现。

我希望有一位 Core Data 大师就如何调试和预防/处理这些情况提出一些建议。我的核心数据堆栈初始化代码直接来自 xcode 项目生成器,并且我已经排除了任何并发问题,因为持久存储协调器仅初始化一次(在启动时)并且此错误发生在此初始化中。

如果相关,很高兴提供更多代码/信息。

谢谢!

0 投票
2 回答
1061 浏览

ios - 带有核心数据的 RestKit:将 NSPersistentStore 与 RestKit RKObjectManager 一起使用

我正在使用带有核心数据的 RestKit。到目前为止,我将 RestKit 初始化如下:

没有这个 xcode 自动生成的核心数据属性:

通过在 NSManagedObject 中调用 objectsWithFetchRequest: 来获取数据。现在我想使用 NSFetchingResultsController,因此我至少需要这样一个 managedObjectContext。但是我从哪里得到这个 managedObjectContext?我的第一个想法是:来自 AppDelegate.m 中自动生成的 managedObjectContext,但这 3 个属性 managedObjectContext、managedObjectModel 和 persistentStoreCoordinator 都是相互依赖的。

如何正确地将 RestKit“链接”到 Core Data?如何将persistentStoreCoordinator“链接”到RestKit 和RKObjectManager?

0 投票
1 回答
57 浏览

core-data - 如何预填充数据库并在核心数据中设置标志以保证每次安装应用程序时我只将对象插入数据库一次

我需要使用核心数据预填充我的数据库,但需要设置一个标志来指示应用程序是否在安装后首次启动。我不知道该怎么做?

这是我在 appDelegate.m 文件中所做的

0 投票
1 回答
128 浏览

core-data - 核心数据:制作数据库的逐个对象副本

我想制作我的 Core Data 数据库的备份副本,而不使用文件管理器来制作 sqlite 文件的副本,或者使用 Persistent Store Coordinator 的 migratePersistentStore 方法(原因太长,无法在此处解释)。我想要做的是用与原始文件相同的 MOMD 打开一个新的持久存储,创建一个新的托管对象上下文,然后遍历我的数据库中的所有对象并将它们插入到新的上下文中。

这适用于简单实体,但问题是我的模型有大约 20 个实体,其中许多实体具有一对多和多对多的关系。稍微复杂一点的解决方案是将每个对象插入到新的 MOC 中,然后将所有新的托管对象保存在内存中,并使用它们在后续传递中绑定对象之间的所有关系。但这似乎是一个非常混乱的解决方案。

是否有一种干净、优雅的方式来实现这一点,它可能适用于任何类型的数据模型,而不仅仅是我自己的模型的定制解决方案,而且不必同时将每个对象都保存在内存中?

谢谢。

0 投票
1 回答
127 浏览

ios - NSInternalInconsistencyException:无法让 NSPersistentStore 启动或创建商店

我整天都在努力解决一个我发现是错误的NSInternalInconsistencyException错误。我收到的错误控制台消息是“此 NSPersistentStoreCoordinator 没有持久存储。它无法执行保存操作。” 我还得到“执行被中断,原因:EXC_BAD_ACCESS(代码=1,地址=0x1)。”

我的 App Delegate 中有以下代码:

我已经仔细阅读了与此类似的其他问题,看来我的代码是一致的,我不应该遇到这个问题。然而,我是...

我已经尝试清理和删除应用程序并重新安装。我在设备和模拟器上都尝试了该应用程序。我将附加的 URLPath 的名称“shindy.sqlite”更改为我以前没有使用过的各种名称。[self saveContext];我还尝试在我的方法中强制实例化,applicationDidFinishLaunching以使我的应用程序创建商店。

我所有解决问题的尝试都只是返回了相同的错误。我不知道还能尝试什么。

0 投票
1 回答
697 浏览

ios - 无法使用 nil 模型读取帖子创建 NSPersistentStoreCoordinator,无法修复

我不确定发生了什么,开始出现模型版本错误,在阅读了这里的一些选项后,我最终删除并再次创建了模型(很多痛苦)。但是,现在我收到“无法使用 nil 模型创建 NSPersistentStoreCoordinator”错误。

我希望在这里阅读大多数帖子(尝试了很多方法但没有奏效)。当我发现文件在哪里(iPhoneSimulator)时,我检查了应用程序的内容,并没有在其中找到任何 mom 或 momd 文件。所以我复制到捆绑包,确保它在编译资源中,重置模拟器,清理并再次加载,但没有找到它(以及优雅的应用程序崩溃)。

有什么想法吗?

谢谢

0 投票
1 回答
1353 浏览

ios - iOS UIManagedDocument:无法打开预加载的持久存储

我正在尝试在基于 UIManagedDocument 的应用程序中预加载持久存储以处理核心数据。

我尝试在应用程序 B 中使用的持久性商店是“生成”并通过应用程序 A 填充。在应用程序 A 和 BI 中,使用 Justin Driscoll 的 UIManagedDocument 处理程序(在此处可用,感谢 Driscoll 先生!)。一切都在应用程序 A 中完美运行。

基于此线程中解释的技术:Pre-load core data database in iOS 5 with UIManagedDocument,我尝试将持久存储放在B的应用程序包中,并在需要时将此存储复制到文档文件夹中(如果没有完成before) 在实例化之前的 init 中。

从捆绑包复制到文档都可以(我尝试了不同的方法并检查了创建,这要归功于 finder 和 nslog),但我就是无法打开“文档”。应用程序不会崩溃,显示视图但表为空(我使用与应用程序 A 完全相同的代码,具有相同的 fetchedResultsController)。首先我认为复制的持久存储是空的,然后我意识到我无法正确打开文档/复制的持久存储)=> 文档状态 = 5,这意味着 UIDocumentStateClosed 和 UIDocumentStateSavingError 的错误(如果我正确解释它??? )

(注意:我也尝试直接从包中实例化和打开文档,但我遇到了同样的问题:doc state = 5)

所以... 与此文档状态 = 5 战斗三天,不知道要修复什么

我想我放在应用程序 B 包中的文件有问题(目前我从 finder 拖放到 xcode 并选择了“为任何添加的文件夹创建文件夹引用”)也许是关于一些选项、元数据或文件权限或...

关于调查什么的任何想法?

(我不认为这与以下代码有关,但是...)这是我的初始化方式(基于 Justin Driscoll 处理程序。只有 custo 是:我检查文档文件夹中是否有存储包,如果没有,我创建它基于在捆绑包中的文件上)

只有我对 Driscoll 先生提供的 performWithDocument 代码所做的“修改”是一些 nslog,以查看发生了什么(每次第一次打开尝试时,doc 状态从 1 变为 5,然后坚持 5...)

0 投票
0 回答
2217 浏览

ios - 无法打开数据库 - iCloud / Core Data

我正在尝试设置我的 Core Data 数据库以与 iCloud 一起使用,我了解基本知识并遵循了一个关于如何设置它的好教程,有人知道可能出了什么问题吗?

我收到无法连接数据库的错误:

Unresolved error: Error Domain=NSCocoaErrorDomain Code=256 "The operation couldn’t be completed. (Cocoa error 256.)" UserInfo=0x1c5de2a0 {NSUnderlyingException=unable to open database file, NSSQLiteErrorDomain=14}, { NSSQLiteErrorDomain = 14; NSUnderlyingException = "unable to open database file"; }

这是我返回持久存储的代码:

编辑

这是我的 managedObjectModel 方法(CategoryModel 是 .xcdatamodeld 的名称):

编辑 2

用日志编辑:

编辑 3

当我尝试从 developer.icloud.com 下载文件时,它不会下载,并且会向 Safari 控制台发送一条消息Failed to load resource: the server responded with a status of 409 (Conflict)

上传文件时,Safari 控制台会发出几个警告:

编辑[现在是什么数字]

记录持久存储时,NSLog(@"MOC: %@", self.managedObjectContext.persistentStoreCoordinator.persistentStores);

我得到以下输出:

所以我猜测错误unable to connect to database被调用是因为只有本地持久存储存在

新错误

编辑 - 目录错误

我认为问题在于未创建目录。

以下日志表明在尝试传输文件时目录不存在。我想我应该能够解决这个问题,iCloud 可以工作:

0 投票
2 回答
530 浏览

core-data - NSPersistentStoreDidImportUbiquitousContentChangesNotification 未在任一 iOS 设备上触发

我已经使用 SQLite 日志设置了核心数据以与 iCloud 一起使用,我同时打开了核心数据和 SQLite 日志并在我的架构中达到了 3 级,这些都不会在从本地存储或云中获取或放置数据时产生错误店铺。

我的本地存储存储所有 SQLite 数据,而云存储配置为仅移动 2 个实体,因为所有本地存储都不需要更新。

记录持久存储时,它们都会出现。

在 developer.icloud.com 上,该文件夹用于存储数据,有两个子文件夹(一个用于 iPad,另一个用于 iPhone)。每个文件夹中都有两个子文件夹和一个receipt.0.cdt文件。

即使一切似乎都已设置,但当我在我的应用程序中操作两个实体之一时,NSPersistentStoreDidImportUbiquitousContentChangesNotification永远不会触发(在任一设备上)。

即使本地数据存储(保存所有实体的本地副本)已更新,并且此更改也会反映在 UI 中。

这是被操纵的商店(在操纵发生时记录)

下面是我操作实体后产生的数据的日志:

这真的让我感到困惑,因为在加载或向数据存储中添加数据时不会产生错误,所以理论上它应该可以工作。

非常感谢你的帮助!!

0 投票
1 回答
109 浏览

ios - 反映 PS 中每个现有记录的 coredata-MO 修改

我在互联网上找到了许多关于核心数据的教程和文章,但我正在制作实时且对初学者更有用的示例应用程序。您可以在此处找到示例代码

核心数据结构核心数据结构是这样的。

我为艺术家、专辑和歌曲制作条目。但问题是稍后对已添加的艺术家进行的编辑并没有反映到专辑中。

我错过了什么?

要重现此问题,我要求下载该项目并运行它。

  • 为艺术家、专辑和歌曲添加一些条目。
  • 然后稍后转到艺术家选项卡并编辑一些艺术家条目。
  • 现在转到专辑选项卡。您将看到与相关专辑条目的旧艺术家名称相同的艺术家名称。

这就是问题。理想情况下,我应该在那里看到新条目。

我想要一些真正的方法来实现这一点