Swift 2.1 - 首次运行时仅预填充一些数据(核心数据)

时间:2016-03-29 02:37:08

标签: swift core-data ios9

我有一小部分数据需要在用户首次启动应用时预先填充。我已经看过其他选项,比如将应用程序与现有的sqlite文件或csv / json捆绑在一起,但由于需要预加载的数据只有一个数据模型的4条记录,如 var categories = [category1, category2, category3, category4],我觉得如果我对此进行硬编码会更有效率。

但我如何确保此插入调用仅在第一次运行时执行一次?

3 个答案:

答案 0 :(得分:1)

我为我的应用预加载数据,我处理以下两种方式之一:

  • NSUserDefaults中设置您已完成导入的位,然后在启动时检查该位(例如,这也可以扩展为允许在新版本上轻松更新文件)。
  • 获取给定实体的对象数量,如果> 0什么都不做(已导入)。

答案 1 :(得分:1)

您可以搜索实体,如果该实体返回0结果,您可以使用初始信息填充它。

var managedContext: NSManagedObjectContext!
let dataFetch = NSFetchRequest(entityName: "Data")

var result:[MyData]?
do {
    result = try managedContext.executeFetchRequest(dataFetch) as? [MyData]
} catch {
    print("Error fetching data")
}

if let data = result {
    if data.count == 0 {
        //create your data and save it
    }
}

答案 2 :(得分:0)

这可能已经很晚了,你可能已经修好了,但我刚才有这个问题。

您可以在AppDelegate中设置类似以下的内容:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    let defaults = UserDefaults.standard
    let isPreloaded = defaults.bool(forKey: "isPreloaded")
    if !isPreloaded {
        preloadData()
        defaults.set(true, forKey: "isPreloaded")
    }

    return true
}

这样,您的应用程序每次都会检查它是否已预先加载数据,如果有,则会跳过它。这假设你已经有了某种设置的preloadData函数。