OGeek|极客世界-中国程序员成长平台

标题: ios - 从属性中建立核心数据关系的最快方法是什么? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-11 20:04
标题: ios - 从属性中建立核心数据关系的最快方法是什么?

我正在对同步算法进行性能优化。

目前,iOS 应用从 Web API 接收大量 JSON。 在许多情况下,存在与关系相关的属性,例如: PS。这是一个简化的例子。

[
    {
        "name":"Alice",
        "age": 18,
        "key": "a001"
    },
    {
        "name":"Bob",
        "age": 18,
        "key": "b002",
        "parent":"a001"
    },
]

给定 CoreData 中的模型:

enter image description here

下载 JSON 后,我需要将其保存到 Core Data 中。但是,我需要建立这些对象之间的关系。

目前,我正在coredata上搜索对象并建立关系,您如何在下面的示例中看到(PS。这是一个简化的示例):

@IBAction func newItemTap(_ sender: Any) {

    if let context = self.managedObjectContext {
        let newPerson = Person(context: context)
        newPerson.name = "Alice"
        newPerson.age = 18
        newPerson.key = "a001"
    }

}

@IBAction func secondItemTap(_ sender: Any) {
    if let context = self.managedObjectContext {

        let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "erson")
        fetchRequest.fetchLimit = 1
        fetchRequest.predicate = NSPredicate(format: "key = %@", "a001")
        do {
            if let results = try context.fetch(fetchRequest) as? [NSManagedObject] {
                if results.count > 0 {
                    let newPerson = Person(context: context)
                    newPerson.name = "Bob"
                    newPerson.age = 18
                    newPerson.key = "b002"
                    newPerson.parent = results.first as! Person?
                }
            }
        } catch {
            print("Error reading trips")
        }
    }
}
@IBAction func checkTap(_ sender: Any) {
    if let context = self.managedObjectContext {

        let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "erson")
        do {
            if let results = try context.fetch(fetchRequest) as? [Person] {
                for obj: Person in results {
                    print(obj.name ?? "")
                    print(obj.parent?.name ?? "<no parent>")
                }
            }
        } catch {
            print("Error reading trips")
        }
    }
}

我正在寻找一种快速建立关系的方法,如 secondItemTap 方法所示。

有人遇到并解决过这种性能问题吗?有什么建议吗?



Best Answer-推荐答案


我对CoreData不是很精通,所以我无法提供实际代码,但基本上可以归结为以下几点:

确保您的数据库在 key 属性上维护良好的索引。

根据您的数据库,在 CoreData 中可能有不同的定义方式,但从 this question 判断它似乎真的可以归结为只是在数据定义的 indexed 属性上打勾(这非常接近它应该的样子)。

关于ios - 从属性中建立核心数据关系的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49948721/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4