问题标签 [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.
core-data - 在 Swift 3 中实现 fetchedresultsviewcontroller
我正在尝试在 Swift 3 中实现 fetchedresultsviewcontroller,并且在将控制器的委托属性设置为 self 时遇到以下错误:
无法将“SomeRootViewController”类型的值分配给“NSFetchedResultsControllerDelegate”类型?
SomeRootViewController.swift
有人可以向我解释这个问题以及如何解决它吗?
ios - 如何使用 NSInMemoryStoreType 清理 NSPersistentStoreCoordinator 的内存对象图?
我使用NSInMemoryStoreType
forNSPersistentStoreCoordinator
来维护内存中的实体和关系,因为我不想将其写入磁盘。
因此,由于核心数据对象引用仍在内存中,所以我计划在某些时候清理内存中的对象图,因为应用程序内存不断增加。
如何从内存对象图中删除/重置/删除整个核心数据实体和关系以清理应用程序内存使用情况?
在需要时是否有任何优化的方法来处理NSInMemoryStoreType
和清理内存?
请注意:我的应用程序的部署目标是 iOS 8.0 及更高版本。所以清理 API 也应该可用于 iOS 8 目标。
谢谢!
ios - 迁移具有不同保护级别的辅助核心数据存储
我目前正在加密核心数据存储。
最终目标是拥有一个具有FileProtectionType.Complete
最大保护的存储,但有些任务可能会在后台完成,这意味着受保护的数据不可用,因此无法将其保存到主存储。
我当前的过程是,当受保护的数据不可用时,将更改保存到带有FileProtectionType.completeUnlessOpen
.
然后,当受保护的数据再次可用时 ( func applicationProtectedDataDidBecomeAvailable(_ application: UIApplication)
),将辅助存储合并回主存储。
这似乎在某种程度上有效,但不是我希望的那样。
例如:
在主商店中,我创建User
并设置了名字和姓氏字段。
在后台,受保护的数据变得不可用后,我会更新名字和姓氏字段。由于受保护的数据不可用,因此将其保存到辅助存储中。
当受保护的数据再次可用时,我使用以下内容将两个存储合并在一起:
然后这似乎User
在主商店中创建了一个新的,而不是像我希望的那样做并更新现有的User
.
所以我的问题有两个:
1)这是处理我解释的场景的最佳方法吗?
2) 我将如何着手使迁移更新现有User
而不是创建新的?会是创建自定义的情况MigrationManager
吗?
我查看了无数其他 StackOverflow 问题,以帮助我了解我现在在正确时间使用这两个商店的点,并将它们合并到当前级别,包括但不限于以下内容:
https://developer.apple.com/documentation/foundation/nsfileprotectiontype?language=objc
core-data - NSInMemoryStoreType 与 NSBatchDeleteRequest 不兼容吗?
我目前正在对与 Core Data 交互的层进行单元测试。它保存、删除和更新Item
对象。但是,我尝试保存几个Item
s 然后执行批量删除的测试一直失败。
这是Item
:
这是与核心数据交互的对象,CoreDataStack
:
这是使用 Core Data 管理持久性的对象:
这是CoreDataStack
我用于测试的子类,它包含一个内存存储:
最后,这是不断失败的测试:
问题
NSInMemoryStoreType 与 NSBatchDeleteRequest 不兼容吗?
如果不是,那么我做错了什么导致我的测试反复失败?
ios - NSManagedContext 返回旧数据而不是新数据
在我的应用程序中,我使用了 NSManagedContext 的双模型。有一个孩子managedObjectContext
和NSMainQueueConcurrencyType
父母
writerManagedObjectContext
一起NSPrivateQueueConcurrencyType
将数据保存到PersistentStoreCoordinator
. 我能够将数据保存在数据库中,但是在检索时我得到的是旧值而不是新值。
下面的代码是将上下文保存到parent context
然后保存到PersistentStoreCoordinator
.
在 stack-overflow 上发现了同样的问题,但它的答案对我的问题没有帮助。有谁知道该怎么做?
core-data - 使用 NSPersistentContainer viewContext 保存到磁盘?
如果我有大量数据,使用 viewContext 保存到持久存储中是否安全?例如,我的临时背景上下文中有 1000 条记录,它是 NSPersistentContainer 的 viewContext 的子项。一旦我在 bg 上下文中保存了所有 1000 条记录,我想使用 viewContext 将其保存在数据库中。这是正确的方法还是我应该创建一个后台上下文来保存到持久存储?
swift - 使用 Core Data 读取 SQLite 数据库时出错
我有中间数据库,我在应用程序中预加载,然后我使用轻量级迁移来更新这个数据库,但是当我第一次调用 NSPersistentStoreCoordinator 时,我有一个错误“数据库磁盘映像格式错误”
对于预加载数据库,我在 AppDelegate didFinishLaunchingWithOptions 中使用以下代码
然后对于轻量级迁移,我使用新的核心数据模型 v 2 并将此代码添加到 persistentStoreCoordinator
我做错了什么或如何解决这个问题?当我通过 Xcode 在设备上启动应用程序时,更新和安装始终有效,而当我使用 TestFlight 版本时,更新和安装无效......
ios - 如何使用当前的 NSPersistentStore 方法在本地和 iCloud 中创建可共享的 Core Data .sqlite 备份
我一直在寻找正确的方法来创建由 Core-Data 支持的 .sqlite 文件的备份并将该备份存储在本地和/或 iCloud(无论用户喜欢什么)中,以供下载、恢复或分享。让我先声明一下,我不是在谈论将持久存储移动到 iCloud 以供应用程序用作其数据源。我只是在询问有关在此问题中创建备份文件的问题。
2014 年,Apple 将 Core Data SQLite 存储的默认日志模式更改为 WAL。
https://developer.apple.com/library/content/qa/qa1809/_index.html
随着这一变化,他们建议:
要安全地备份和恢复 Core Data SQLite 存储,您可以执行以下操作:使用 NSPersistentStoreCoordinator 类的以下方法,而不是文件系统 API,来备份和恢复 Core Data 存储:- (NSPersistentStore *)migratePersistentStore:( NSPersistentStore *)store toURL:(NSURL *)URL options:(NSDictionary *)options withType:(NSString *)storeType error:(NSError **)error
请注意,这是我们推荐的选项。
在此之前,我一直使用 NSFileManager 创建备份。有了这个建议,我相信在本地创建备份的正确方法是添加一个新的持久存储,然后分别使用 NSPersistentStoreCoordinator 方法 和 将该持久存储迁移到所需的备份addPersistentStoreWithType:configuration:URL:options:error
位置migratePersistentStore:toURL:options:withType:error
。
我的问题有两个:
- 我以前会在导出数据之前将数据压缩到 NSData,然后将 NSData 直接写入文件。我的文件扩展名将是我的应用程序自定义的,用于通过电子邮件或其他 iOS 共享方法共享压缩数据。使用该
migratePersistentStore:toURL:options:withType:error
方法,我现在在所需位置得到一个 .sqlite 文件(及其相应的 WAL 文件等),但我现在不知道如何共享此文件。如果我压缩文件,我会不会有丢失我努力保存的数据的危险migratePersistentStore:toURL:options:withType:error
?我相信是这样,但我确实想让我的用户通过电子邮件等方式共享/保存他们的备份,我现在不知道如何最好地解决这个问题。 - 我很难理解如何
migratePersistentStore:toURL:options:withType:error
将文件备份到 iCloud。就像上面的共享示例一样,我看到我可以使用addPersistentStoreWithType:configuration:URL:options:error
, 并migratePersistentStore:toURL:options:withType:error
在本地获取所需的 .sqlite 副本,但是如果我尝试将该本地文件上传到 iCloud,我担心我会丢失我努力保存的数据使用migratePersistentStore:toURL:options:withType:error
首先。我一直在尝试查看是否可以/应该使用一种方法migratePersistentStore:toURL:options:withType:error
将新创建的 persistentStore 直接移动到 iCloud,但我无法找到任何有关如何执行此操作或是否应该在全部。是否有我需要使用的特定 url 来指示persistentStore 的目的地是 iCloud?
对于这些问题的答案,我将不胜感激任何可以分享的见解。
ios - 在 NSPersistentStoreCoordinator 上调用 destroyPersistentStore 后,我应该删除底层持久存储文件吗?
我正在迁移我的 iOS 应用程序以使用NSPersistentContainer
. 默认情况下,此类将其持久存储文件定位在Library/Application Support
目录中;以前我的商店文件存储在Documents
目录中。
如果在旧目录中找到存储文件,我添加了一些代码来移动存储文件:
调用后destroyPersistentStore(at: url)
,存储文件仍然存在于磁盘上。这些会在某个时候自动清理吗?还是我应该删除它们?我还应该删除.sqlite-shm
和.sqlite-wal
文件吗?
ios - 恢复核心数据
我已经设法使用以下代码创建了我的 PersistentStore 的本地备份:
这似乎有效。备份文件已创建。这个答案: 在本地备份核心数据,并从备份中恢复 - Swift 建议我需要释放我的 NSPersistentContainer 然后使用 replacePersistentStore(at:destinationOptions:withPersistentStoreFrom:sourceOptions:ofType:) 来恢复我的备份。所以我尝试这样:
这似乎没有任何作用。我没有收到任何错误或警告,但它似乎也没有在我备份它时恢复我的核心数据。
抱歉,我知道这可能是糟糕的代码。实际上,我完全使用 FileManager 实现了我想要的结果,但这似乎让我的控制台非常生气。我想正确地做到这一点,没有任何警告。