问题标签 [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.
ios - 此 NSPersistentStoreCoordinator 无法执行保存操作
当我登录应用程序时,它似乎在 NSManagedObjectContext *managedObjectContext = self.managedObjectContext; 在以下保存上下文方法中并给出错误“此 NSPersistentStoreCoordinator 没有持久存储(架构不匹配或迁移失败)。它无法执行保存操作。”,
ios - 如何使用 persistentStoreCoordinator 删除选定的表
我目前正在开发一个已经使用 Objective-C 开发的 IOS 应用程序。我添加了一个模块,用户在登录时存储有关用户的详细信息。但由于应用程序已经有一些代码,当我按下注销按钮时,它会从数据库中删除所有实体。为此,他们正在使用类似下面的代码。
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
通过保留断点,我了解到他们正在检索数据库的 url 并将其删除并重新创建它。假设他们有 3 个表 A、B 和 C,我想删除 A 和 B 但不是 C。参考 - 持久存储协调器
我的理解正确吗?我怎样才能做到这一点?
TIA
core-data - NSBundle 中的 CoreData sqlite 文件
我有一个 JSON 文件。大小约为 20MB。
项目 1. 因此,我创建了一个项目并将数据从该 JSON 文件导入到 Core Data。Core Data 创建以下 sqlite 文件:整个数据列表.sqlite、整个数据列表.sqlite-shm 和整个数据列表.sqlite-wal。将整个内容从 JSON 复制到核心数据并创建一次性文件需要 10 分钟。
现在在 Project2 中。我复制了MainBundle中的所有三个文件。我必须创建.xcdatamodeld,就好像我直接从Project1复制它一样,它找不到.momd文件。
那么,来自 NSBundle mainBundle 的 storeURL 是否是一种可靠的方法,其中存储了整个数据列表.sqlite、整个数据列表.sqlite-shm 和整个数据列表.sqlite-wal 文件?
通常它们在文档目录中。
ios - 核心数据 NSPersistentStoreCoordinator 中止来电,SWIFT
我花了很多时间让我的 Core Data 模型有效地为我的 iOS 应用程序开发工作。在大多数情况下,我的一切工作都很顺利,但前几天我在加载数据时遇到了一个独特的错误,这只是偶然。我刚开始在我的 iPhone 上运行我的应用程序进行测试,就在它启动并开始使用 Core Data 加载数据时,我姐姐打电话给我。时机相当偶然,因为该中断似乎abort()
已从persistentStoreCoordinator
.AppDelegate
这是我所指的代码:
显然,我看到苹果在哪里评论说该abort()
功能只需要在开发期间使用,并且应该在生产中删除一次,但我想知道是否有人可以告诉我如何正确处理这种类型的错误?
我没有加载大量数据,我想在这种情况下我需要做的就是重新开始加载过程。
我想我真正要问的是,一旦发现错误,是否有简单的方法告诉它重试,还是我必须手动返回在应用程序启动时调用数据获取的方式?
ios - 在应用程序运行时切换 Core Data sqlite 文件?数据不显示
我让用户在 iOS 设备上通过电子邮件备份和恢复 sqlite 数据库。我成功导出和导入 sqlite 数据库。我的问题是当我想用新文件替换当前的 sqlite 文件时,数据不会自动更新。当我在函数末尾添加一个 exit(0) 时,它会关闭,并且在重新打开应用程序时数据就在那里。这不是一个解决方案,因为它基本上是一个崩溃。这是我用来将一个 sqlite 文件替换为另一个的函数。注意我已经关闭了日志,所以整个数据库是一个 sqlite 文件有人知道在应用程序运行时用另一个 sqlite 文件替换一个 sqlite 文件的正确方法吗?谢谢你。
}
ios - 有没有人注意到iOS10 NSPersistantContainer。它是 NSPersistantStoreCoordinator 的替代品吗?
在 iOS 10 之前,为了初始化 CoreData statck,我们有 3 个主要组件: NSManagedObjectModel NSPersistantStoreCoordinator NSManagedObjectContext
但是在最新的 XCode 8 中,当我创建一个核心数据应用程序时,我发现没有 NSPersistantStoreCoordinator,而是看到了一个新的 iOS 10 NSPersistantContainer 和 NSPersistentStoreDescription。这会替代现有的 coredata 方法吗?
ios - NSPersistentStoreCoordinator 在读取特定 NSManagedProperty 后释放 NSManagedObject 时抛出 EXC_BAD_ACCESS
错误描述
我有一个应用程序,其中使用核心数据(由 SQLite 支持)和以下NSManagedObject
子类在本地存储了一些数据
正如上面片段中的注释中提到的,如果我允许newStateJson
释放从属性中读取的值,则会发生错误。
我收到的错误来自后台线程:
如果我在诊断工具中启用僵尸,我会得到这个
如果启用了僵尸,我还会在控制台中收到以下消息:
2016-11-18 16:26:13.773 ScoutingData_Example[51750:4716636] *** -[CFData release]: 消息发送到释放的实例 0x7f8c4eb10ae0
以及以下堆栈跟踪:
到目前为止我尝试过的
我尝试将NSManagedObjectContext
用于获取此数据的内容存储在静态变量中,以确保上下文永远不会被释放,但这没有任何效果。
我尝试将NSData?
属性转换为String?
属性,并将数据存储为 Base64 编码字符串而不是二进制数据(并且还更新了支持模型),但这也没有效果。错误仍然存在。
我试过注释掉读取属性的代码,错误消失了,但这显然不是一个可接受的解决方案。
我尝试在读取值后将值存储在全局变量中,以防止它被释放,并且错误消失了,但这也不是一个有效的解决方案。
我已经尝试注释掉所有使用该值的代码,而是只将值打印到控制台,并且错误仍然存在。这使我相信,完全访问该属性,然后再释放它的行为是为该错误创造条件的原因。
我很困惑。在我读取数据后如何处理数据似乎真的很奇怪,而且当后台线程被释放时发生任何事情似乎特别奇怪。
更奇怪的是,它似乎特定于这一属性。例如,我在读取 newDataJson 属性的行上方读取的 id 属性不会导致任何问题。您可能会认为这不同,因为 id 是一个字符串,而不是 NSData,但我尝试将我的 NSData 属性转换为字符串属性,但它仍然没有改变错误。
任何想法将不胜感激。谢谢。
编辑
不确定这是否有帮助,但这是我的模型架构
core-data - Core Data 自动轻量级迁移失败
每次 Core Data 在我的应用程序(当前使用“Model 2.5”)中创建新版本的模型(我们称之为“Model 2.6”)后尝试进行自动轻量级迁移时,我都会崩溃。
我已经使用 Core Data 有一段时间了,我很清楚,每当我需要为新版本更改模型时,我必须使用“编辑器 --> 添加模型版本”,给那个版本一个新的标识符,并使用“当前版本”弹出窗口切换到该标识符。我熟悉“用于打开商店的模型与用于创建商店的模型不兼容”错误,因为我以前犯过这个错误。我相信我遇到了不同的问题,尽管收到了相同的错误消息。
在周末的大部分时间里我都反对这个之后,我希望有人以前见过这个并且可以提供一些明智的建议。
这是我触发问题的步骤:
- 重置模拟器,核对派生数据,清理构建并以 2.5 格式保存文件。
- 在 Xcode 中,编辑器 --> 添加模型版本...
- 使用该向导基于“Model 2.5”制作“Model 2.6”
- 将新人的标识符更改为“2.6”
- 对与自动轻量级迁移完全兼容的新版本做一些超级简单的事情,比如添加一个新实体。
- 在当前版本的弹出窗口下设置“模型 2.6”
- 在模拟器中重建和启动。打开我刚刚保存的 2.5 文件时崩溃。
到目前为止,我已经成功地管理了九个不同版本的文件格式更新,并且自动轻量级迁移始终完美无缺。
现在和上次的区别:
- 我的模型版本 2.5 是我第一次将“工具版本”设置为“自动(Xcode 8)”。所有以前的版本都将此设置为“Xcode 7.3”,因此这将是第一次从已经在“自动(Xcode 8)”上的模型版本进行迁移
- 我的 xcdatamodeld(因此也是 momd 文件)现在存在于我的共享框架中,而不是主机应用程序中(因此我可以在扩展程序、tvOS 等之间共享代码/资源),尽管我尝试撤消此更改以查看它是否是原因,并且错误仍然发生。
- 老实说,我不确定。这本应该是一个微不足道的长达一小时的任务,结果变成了两天令人头疼的事情。
这是调用后记录的实际错误
其中 storeOptions 是 { NSInferMappingModelAutomaticallyOption = 1; NSMigratePersistentStoresAutomaticallyOption = 1; } 并且由于某种原因有两个:一个用于文件 .Model.sqlite.migrationdestination_41b5a6b5c6e848c462a8480cd24caef3 另一个用于文件 Model.sqlite,大概是迁移过程的一部分。(代码=134 110,基础代码=134 100)
创建这个新版本时我是否遗漏了一些明显的东西?还有其他要清理的缓存或隐藏文件吗?我确实注意到,当创建一个新的 What.xcdatamodel 时,Xcode 中的“放弃所有更改...”会留下该文件,所以我要格外小心地删除测试运行并检查 Xcode 外部的“git status”。
我对错误消息持怀疑态度,因为我可以将 xcdatamodeld 的“当前版本”切换回 2.5,看到文件打开得很好,将“当前版本”切换到 2.6,看到它失败,然后以可预测的成功来回切换/失败。它显然能够打开 2.5 文档,只是在尝试将它们迁移到 2.6 时无法打开。
ios - 在 Objective c 中处理多线程
在我的项目中,我使用NSOperationQueues在核心数据中执行不同的任务。在此,一些操作在 performBlock 中执行,而另一些在 PerformBlockAndWait 中执行,在后台队列或 mainQueue 中调用。在此有主上下文和后台上下文来处理不同的线程。当我从我的应用程序中注销时,我想清除所有存储的详细信息在核心数据中并停止当前运行的所有线程。
简而言之:从应用程序注销时,我需要清除存储在 coredata 中的所有数据,然后停止所有后台线程运行。我怎样才能做到这一点?
ios - 在 persistentContainer 中删除已加载的 persistentStore
我已经使用以下内容在 persistentContainer 中加载了一个特定的 URL 文件:
当我需要加载不同的游戏数据时,我想删除那个特定的 URL 文件并用不同的文件替换它。我无法在 Apple 文档中找到 persistentContainer 的任何等效项container.unloadPersistentStores(....)
我是 Swift 编程的菜鸟,任何想法都将不胜感激。