问题标签 [nspersistentcontainer]
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.
swift - 核心数据:使用环境变量 managedObjectContext 出现问题
我是 swift 新手,我无法理解环境变量的工作原理。
在 Core Data 中,我创建了一个名为“API”的新实体,它具有一个属性 id:Int32。
然后在 SwiftUI 中,我想找到 id 的最大值。我写了一个请求,但是每当我使用传递给视图作为环境变量 managedObjectContext 时,它总是使我的应用程序/预览崩溃。这是使用 NSManagedObjectContext.fetch(NSFetchRequest) 后的崩溃信息(使用 FetchRequest 仅提供带有异常 EXC_BAD_INSTRUCTION 的堆栈跟踪)
请记住,此错误会根据我使用的项目而变化。在我的主要项目中,我遇到了这样的错误:
这是我正在使用的代码
所有评论的行崩溃应用程序。为什么从 AppDelegate.persistentContainer.viewContext 获取上下文工作得很好,但是使用我认为应该相同的环境变量 managedObjectContext 不起作用?我花了5个小时,检查了几乎所有东西,尝试了很多东西但没有成功。最后我可以继续从 AppDelegate 获取上下文,但是环境变量有什么问题?我错过了一些常识还是只是一个错误?我对在 Xcode 中遇到的错误感到头疼,从清除构建文件夹后缺少自动完成到更改所有引用的结构/文件名后出现数百个错误,尽管之后成功构建。每天重启几次 Xcode 以使其正常工作对我来说是正常的。
还有一些我注意到的事情,当我将 FetchRequest 创建为变量并在正文中的某个列表中使用它时,它起作用了。问题仅在于,当我尝试在代码/函数/init 中手动获取内容时,例如按钮操作或方法 onAppear、init 等。我尝试在物理设备上运行应用程序并显示预览。一样的效果。
我将 Xcode 11.4 与 Swift 5 一起使用。
ios - 如果我在 swift 5 中启用轻量级迁移,为什么会删除数据?
我已经成功启动了我的应用程序的第一个版本MyProject.xcdatamodel
。现在我的第二个版本正在开发中,我创建了名为MyProject2.xcdatamodel
基于的新模型版本MyProject.xcdatamodel
并将其设置为Current
. 我已启用轻量级迁移,如下所示AppDelegate
:
这样做之后,我首先安装了我的旧版本,然后在旧版本之上安装了新版本。在启动新版本时,没有从我没有接触过的旧模型的数据库表之一中找到数据。如果我删除这 4 行迁移,它正在获取数据。
可能是什么原因?我为轻量级迁移做错了什么吗?
swift - 如何将 Core Data 的数据迁移到 App Group 的数据
我刚刚App Groups
使用这个StackOverFlow 帖子添加到我的应用程序中。不幸的是,由于defaultDirectoryURL
正在更改,我无法获取在使用 App Groups 目录之前创建的任何旧数据。我知道数据仍然存在,因为当我切换回使用常规NSPersistentContainer
而不是 时GroupedPersistentContainer
,我可以获得数据。
如何将旧数据迁移到获取应用组数据的位置?
核心数据代码:
GroupedPersistentContainer 代码:
我还没有为我的 NSPersistentCloudKitContainer 完成此操作,但它将遵循与此相同的格式。
ios - 使用 NSPersistentCloudKitContainer 时:如果用户退出 iCloud 怎么办?
从关于 CloudKit 的几个 Apple WWDC 谈话中,当使用 CloudKit 跨设备同步私人用户数据时,当用户注销 iCloud 时,应用程序应该清空设备缓存/本地副本(我使用 Core Data for on-device永久性)。然后,当该用户(或任何真正的用户)在同一设备上重新登录到他各自的 iCloud 帐户时,该设备应该从相应的 iCloud 帐户同步回数据。说得通!
我想知道当我使用 NSPersistentCloudKitContainer 时如何实现这一点(而不是自己编写所有 CloudKit 代码)。我查看了与 Apple WWDC 2019 session 202(“Using Core Data with CloudKit”)相关的示例代码,但此代码不是我想要的(示例只是不关注 iCloud 帐户部分,这就是他们不关注的原因懒得清空缓存,我认为):确实,如果我注销用户,NSPersistentCloudKitContainer 会停止同步,但是当我重新登录时它会再次同步。这实际上更像是期望的(实际上也是实际的,这很好) 当我的网络连接离线一段时间时示例应用程序的行为。
但是,如果用户从 iCloud 注销(我使用 CloudKit 框架来了解用户帐户注销和登录状态),我需要做的是:
- 从 NSPersistentCloudKitContainer “断开” sqlite 存储,然后
- 清空(甚至删除)数据库,然后,
- 当旧(或另一个)用户登录时,初始化一个新的 NSPersistentCloudKitContainer (它将重新创建一个空数据库,就像第一次使用该应用程序一样),因此可以继续与相应的云数据库进行通信。
我不能在“连接”到 NSPersistentCloudKitContainer 时清空数据库,因为它会记录所有删除,并且一旦(相同)用户再次登录,这些删除就会同步到云,我当然不想要.
这是怎么做的,也就是基本上遵循这三个步骤?
如果是,我该怎么做第 2 步?由于我必须使用某种 NSPersistentContainer 来与数据库对话,Apple 警告不要直接执行文件系统操作,而只能通过 Core Data。那么我是否需要初始化一个“标准”NSPersistentContainer(没有到云的通信管道),然后销毁数据库(例如,使用协调器实例方法destroyPersistentStore())?
还是有另一种方法可以实现相同的目标?
非常感谢您的帮助!!
core-data - 找不到 NSEntityDescription CoreData Swiftui 的唯一匹配项
当我使用我的应用程序时,有时会出现一个错误,它似乎是随机的(或者我没有弄清楚确切的时间......),然后我的所有列表都是空的(就像 CoreData 中没有任何内容一样)。但是如果我关闭我的应用程序并重新打开它,列表就会出现没有任何问题......
我在堆栈溢出上搜索了这个问题,但对我来说什么都不清楚......
错误 :
加载持久化容器:
这是我获取结果的函数:
2个问题:我应该如何解决这个错误?0x2815e8790 是什么意思?
编辑 1: 我找不到任何其他类调用 CDDetail
- 如果我将模块设置为当前产品模块(没有任何变化)
- 没有任何改变如果我更换:
- fetchRequest:NSFetchRequest = CDDetail.fetchRequest()
经过
- fetchRequest = NSFetchRequest(entityName:"CDDetail")
swift - 将新实体保存到 Core Data 后更新集合视图
在将新实体对象保存到persistentContainer 后,我在更新集合视图时遇到了困难。我必须重新加载应用程序才能看到新数据。我读过类似的问题,但他们似乎没有遇到与我相同的问题,因为他们能够毫无问题地调用 reloadData。
代码溢出 popalert 请求用户名将信息保存到核心数据实体中 在集合视图中插入新部分
基本上简化了我想要实现的方案。但是,在我保存记录后,我尝试使用 performBatchupdate 插入一个新部分,我得到相同数量的记录。我已经查看了整个周期的值,并且我陷入了两个可能的原因之间。首先,我的获取请求没有获取新数据。或者,在应用程序重新启动之前不会保存上下文。重新启动时会加载新数据,但是当我将其推送到后台并重新打开它时,情况并非如此。
下面是通用代码。寻找任何建议,或让我知道我缺少什么。
ios - 罕见场合的核心数据随机删除一切
极少数情况下(<1% 的用户),用户会通知我他们打开了我的应用程序,但他们的所有数据都消失了。我遇到的问题是我无法复制这个问题,因为它很少发生。我什至不知道如何开始解决这个问题。用户使用该应用程序时似乎不会发生这种情况。他们似乎只是有一天打开它,数据不再存在。
有一次,用户可以通过关闭和打开我的应用程序的 iCloud 开关(在手机设置中)来恢复数据。但是,这不适用于其他用户。
我正在阅读 iOS 可能会在存储空间已满时删除缓存。但是,据我了解,容器的默认位置在应用程序支持中。
这是我在 App Delegate 中的核心数据实现:
我像这样在全球范围内访问它:
jquery - 多个 NSPersistentContainer,同一个存储
我有一个 我设置的NSPersistentContainer
子类:MyCoreData* coreData
这一切都在我的应用程序的一个主机对象中工作。我想从我的应用程序的另一个不相关部分对 CoreData 存储进行只读访问。基本上这是在非面向用户的后台线程中运行的,我想从 GUI 的一部分访问它以显示一些数据。
是否可以在其他地方进行相同的初始化并使用两个不同的 NSPersistentContainer 对象将事物绑定到同一个存储?
我知道如果我能到达这个宿主对象,我可以调用newBackgroundContext
,但我尽量不把它们联系在一起。
有一些 iOS 应用程序和扩展程序的例子,但我不熟悉这种情况。我需要在同一个应用程序中设置两个 NSPersistentContainer 对象,它们共享一个公共商店和模型。
ios - 我已经评论了 saveContext 部分,它仍然保存在 coredata 中并显示保存的数据。它检查电子邮件验证,但仍然保存
它进入 if 语句并检查条件,但仍然保存。不输入 else 语句。但是当保存上下文被评论时它被保存了所以我不知道它是如何被保存的
swift - CoreData - 加载本地和 AppGroup NSPersistentContainers
我想同时加载localNSPersistentContainer
和AppGroup的NSPersistentContainer
这是我所做的:
但是,如果我在单击 SwiftUI 按钮时执行此代码:
它崩溃了Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'executeFetchRequest:error: A fetch request must have an entity.'
但是,如果我删除与containerAppGroup
OR相关containerLocal
的所有代码,错误就会消失,一切正常。但在这种情况下,我无法在我的应用程序运行时访问这两个容器数据。