我正在尝试使用今天扩展小部件中的Core Data访问数据库。
创建Core Data容器的函数是:
func createContainer(completion: @escaping (NSPersistentContainer) -> ()) {
let applicationGroupIdentifier = "group.com.name.exampleApp.sharedContainer"
guard let newURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: applicationGroupIdentifier)
else { fatalError("Could not create persistent store URL") }
let persistentStoreDescription = NSPersistentStoreDescription()
persistentStoreDescription.url = newURL
let container = NSPersistentContainer(name: "ContainerName")
container.persistentStoreDescriptions = [persistentStoreDescription]
container.loadPersistentStores { (_, error) in
guard error == nil else { fatalError("Failed to load store:\(String(describing: error))") }
DispatchQueue.main.async { completion(container) }
}
}
但是,我收到以下错误:
CoreData:错误:尝试在路径中添加只读文件 文件:///私人的/ var /移动/容器/共享/ AppGroup / C9324B65B-265C-4264-95DE-B5AC5C9DAFD0 / 读/写。将其添加为只读。这将是一个很难的错误 未来;您必须指定NSReadOnlyPersistentStoreOption。
如果我像这样指定NSReadOnlyPersistentStoreOption:
persistentStoreDescription.isReadOnly = false
我收到错误:
无法加载存储:可选(错误域= NSCocoaErrorDomain代码= 513 "由于您没有权限,因此无法保存文件。"):
可能是什么原因和解决方案?
答案 0 :(得分:1)
遇到同样的问题并通过添加
解决了这个问题let directory = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.identifier")!
let url = directory.appendingPathComponent("MyDatabaseName.sqlite")
CoreData可能试图打开基本文件夹作为其sqlite数据库,但这并不是很好。
添加isReadOnly不允许CoreData重新使用文件夹:)
来源:https://github.com/maximbilan/iOS-Shared-CoreData-Storage-for-App-Groups
答案 1 :(得分:0)