菜鸟教程小白 发表于 2022-12-11 20:04:06

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


                                            <p><p>我正在对同步算法进行性能优化。</p>

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

<pre><code>[
    {
      &#34;name&#34;:&#34;Alice&#34;,
      &#34;age&#34;: 18,
      &#34;key&#34;: &#34;a001&#34;
    },
    {
      &#34;name&#34;:&#34;Bob&#34;,
      &#34;age&#34;: 18,
      &#34;key&#34;: &#34;b002&#34;,
      &#34;parent&#34;:&#34;a001&#34;
    },
]
</code></pre>

<p>给定 CoreData 中的模型:</p>

<p> <a href="/image/EucRh.png" rel="noreferrer noopener nofollow"><img src="/image/EucRh.png" alt="enter image description here"/></a> </p>

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

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

<pre><code>@IBAction func newItemTap(_ sender: Any) {

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

}

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

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

      let fetchRequest = NSFetchRequest&lt;NSFetchRequestResult&gt;(entityName: &#34;Person&#34;)
      do {
            if let results = try context.fetch(fetchRequest) as? {
                for obj: Person in results {
                  print(obj.name ?? &#34;&#34;)
                  print(obj.parent?.name ?? &#34;&lt;no parent&gt;&#34;)
                }
            }
      } catch {
            print(&#34;Error reading trips&#34;)
      }
    }
}
</code></pre>

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

<p>有人遇到并解决过这种性能问题吗?有什么建议吗?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我对<code>CoreData</code>不是很精通,所以我无法提供实际代码,但基本上可以归结为以下几点:</p>

<p>确保您的数据库在 <code>key</code> 属性上维护良好的索引。</p>

<p>根据您的数据库,在 <code>CoreData</code> 中可能有不同的定义方式,但从 <a href="https://stackoverflow.com/questions/7935348/what-does-the-indexed-property-of-a-coredata-attribute-do" rel="noreferrer noopener nofollow">this question</a> 判断它似乎真的可以归结为只是在数据定义的 <code>indexed</code> 属性上打勾(这非常接近它应该的样子)。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 从属性中建立核心数据关系的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/49948721/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/49948721/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 从属性中建立核心数据关系的最快方法是什么?