如何在Xcode中预加载关系数据?
我正在使用CoreData在Xcode 9中构建一个iOS应用程序。我需要能够提供一个默认的数据集,可以预先填充应用程序,也可以用于默认情况或重置应用程序 我有以下使用plist导入单个数据数组的代码:如何在Xcode中预加载关系数据?,xcode,core-data,Xcode,Core Data,我正在使用CoreData在Xcode 9中构建一个iOS应用程序。我需要能够提供一个默认的数据集,可以预先填充应用程序,也可以用于默认情况或重置应用程序 我有以下使用plist导入单个数据数组的代码: private func preloadData() { let preloadDataKey = "didPreloadData" let userDefaults = UserDefaults.standard if userDefaults.bool(forK
private func preloadData() {
let preloadDataKey = "didPreloadData"
let userDefaults = UserDefaults.standard
if userDefaults.bool(forKey: preloadDataKey) == false {
guard let urlPath = Bundle.main.url(forResource: "PreloadData", withExtension: "plist") else { return }
let backgroundContext = persistentContainer.newBackgroundContext()
persistentContainer.viewContext.automaticallyMergesChangesFromParent = true
backgroundContext.perform {
if let arrayContents = NSArray(contentsOf: urlPath) as? [String] {
do {
for companyName in arrayContents {
let companyObject = Company(context: backgroundContext)
companyObject.name = companyName
}
try backgroundContext.save()
userDefaults.set(true, forKey: preloadDataKey)
} catch {
print(error.localizedDescription)
}
}
}
}
}
但是,我需要导入的数据与两个实体和每个实体的多个属性相关。我该怎么做呢?这里有一个例子,有两个实体,汽车制造商和CarModel。我在plist中使用了一个字典数组,每个字典都是一个CarModel实例,关系是非规范化的,这样每个CarModel都会重复automaker的所有属性,在我的示例中,它只是属性
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Cars</key>
<array>
<dict>
<key>engine</key>
<string>Diesel</string>
<key>maker</key>
<string>Volvo</string>
<key>model</key>
<string>V70</string>
</dict>
<dict>
<key>engine</key>
<string>Petrol</string>
<key>maker</key>
<string>Volvo</string>
<key>model</key>
<string>XC90</string>
</dict>
</array>
</dict>
</plist>
阅读本文时,我会在swift代码中使用缓存字典,该字典保存已创建的汽车制造商实例,以避免核心数据中的重复您说数据与两个实体相关,但您没有解释这是一个问题的原因?您的核心数据设计是否非常不同,或者这是维护关系的问题还是…?从我正在处理的示例来看,没有关系,它是一个单一数组。然而,在我自己的应用程序中,有两个实体具有属性以及它们之间的关系。我不知道这些信息是如何在Plist中显示的。我想我们正在接近这一点。我的数据结构是这样的:季节任务标题细节季节和任务之间有一对多的关系。这会在类似于你们上面所说的结构中实现吗?是的,因为在我的例子中,汽车制造商和CarModel之间有一对多的关系。因此,为每个任务创建一个如上所述的结构,其中每个任务还包含一个完整的季节对象。感谢您在这方面的帮助。