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

时间:2018-07-03 23:24:43

标签: xcode core-data

我正在使用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)
            }
        }
      }
    }
}

但是,我需要导入的数据与两个实体和每个实体的多个属性相关。我该怎么办?

1 个答案:

答案 0 :(得分:1)

下面是一个带有两个实体CarMakerCarModel的示例。我在plist中使用了一系列字典,每个字典都是一个CarModel实例,并且该关系被非规范化,从而对每个CarMaker重复了CarModel的所有属性,在我的示例中,仅是属性

<?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>

在阅读本文时,我将在我的快速代码中使用一个缓存(字典),该缓存保存已创建的CarMaker实例,以避免Core Data中的重复

相关问题