• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 从属性中建立核心数据关系的最快方法是什么?

[复制链接]
菜鸟教程小白 发表于 2022-12-11 20:04:06 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

目前,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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap