Swift 更改容器目标时核心数据已删除

Swift 更改容器目标时核心数据已删除,swift,xcode,core-data,nspersistentcontainer,Swift,Xcode,Core Data,Nspersistentcontainer,我已经在我的应用程序中使用核心数据很长时间了,使用标准设置,但是当我更改NSPersistentContainer时,所有内容都被删除了。我原以为新的NSPersistentContainer是空的,但当我回到原来的NSPersistentContainer时,里面也没有任何东西(之前有10000多个对象) 原始标准设置 lazy var persistentContainer:NSPersistentContainer={ let container=NSPersistentContainer

我已经在我的应用程序中使用核心数据很长时间了,使用标准设置,但是当我更改NSPersistentContainer时,所有内容都被删除了。我原以为新的NSPersistentContainer是空的,但当我回到原来的NSPersistentContainer时,里面也没有任何东西(之前有10000多个对象)

原始标准设置

lazy var persistentContainer:NSPersistentContainer={
let container=NSPersistentContainer(名称:“MyApp”)
中的container.loadPersistentStores(completionHandler:{(storeDescription,错误)
如果let error=错误为N错误{
fatalError(“未解决的错误\(error),\(error.userInfo)”)
}
})
返回容器
}()
但是,当我使用下面的代码将持久容器更改为与扩展共享应用程序数据时,应用程序数据似乎都消失了

lazy var persistentContainer:NSPersistentContainer={
let container=NSCustomPersistentContainer(名称:“MyApp”)
中的container.loadPersistentStores(completionHandler:{(storeDescription,错误)
如果let error=错误为N错误{
fatalError(“未解决的错误\(error),\(error.userInfo)”)
}
})
返回容器
}()
NSCustomPersistentContainer类:NSPersistentContainer{
重写开放类func defaultDirectoryURL()->URL{
var storeURL=FileManager.default.containerURL(用于安全应用程序组标识符:“group.MyApp”)
storeURL=storeURL?.appendingPathComponent(“MyApp.sqlite”)
返回storeURL!
}
}
当我回到使用以前的设置时-即

let container = NSPersistentContainer(name: "MyApp")
而不是

let container = NSCustomPersistentContainer(name: "MyApp")

没有从数据库返回任何数据。更改持久容器的位置是否真的可以删除原始容器中的所有数据。我假设它会创建两个独立的容器,所以我可以切换回原来的容器,所有的东西都会在那里

由于名称
defaultDirectoryURL
意味着URL必须指向一个目录,而不是
sqlite
文件。@vadian
defaultDirectoryURL
用于设置应用程序和扩展名的共享目录的位置。但是为什么将
NSPersistentContainer
的位置更改为该位置会删除原始容器中的所有原始信息?也许您必须将容器的存储URL显式设置回默认值。@当我使用
let container=NSPersistentContainer(名称:“MyApp”)时,请注意
而不是
let container=NSCustomPersistentContainer(名称:“MyApp”)
我假定它会自动执行此操作,因为它不再覆盖
defaultDirectoryURL()
属性。或者不是这样?是的,但是检查持久存储(不是容器)的
url
,并检查数据库文件是否存在于该url中