如何在Xcode中预加载关系数据?

如何在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

我正在使用CoreData在Xcode 9中构建一个iOS应用程序。我需要能够提供一个默认的数据集,可以预先填充应用程序,也可以用于默认情况或重置应用程序

我有以下使用plist导入单个数据数组的代码:

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之间有一对多的关系。因此,为每个任务创建一个如上所述的结构,其中每个任务还包含一个完整的季节对象。感谢您在这方面的帮助。