菜鸟教程小白 发表于 2022-12-11 16:52:58

ios - 核心数据 - 创建附加属性或结构化数据


                                            <p><p>我正在开发一个项目,用户可以在该项目中保存带有标题和标题的图像,然后使用 Core Data 保存它。我遇到的问题是尝试添加一个相册,用户可以在其中保留类似的图像和标题。我是 CoreData 的新手,整天都在查看文档和梳理 Stackoverflow。</p>

<p>我附上了我正在寻找的基本布局的图像(当然不是艺术家)。 <a href="http://i.stack.imgur.com/OVLWp.png" rel="noreferrer noopener nofollow">Layout</a> </p>

<p>我还附上了一张我认为数据结构应该是什么样子的图片。 <a href="http://i.stack.imgur.com/Gt8Hy.png" rel="noreferrer noopener nofollow">Data Structure</a> </p>

<p>带有红色标签的部分是我在构建时遇到的问题。我已经构建了我认为是数据结构的“顶层”层。</p>

<pre><code>let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    let context: NSManagedObjectContext = appDel.managedObjectContext

    let saveData = NSEntityDescription.insertNewObjectForEntityForName(&#34;ScannedItem&#34;, inManagedObjectContext: context)

    let imageRep = UIImagePNGRepresentation(image)!

    saveData.setValue(textTitle, forKey: &#34;savedTitle&#34;)
    saveData.setValue(scannedText, forKey: &#34;savedText&#34;)
    saveData.setValue(imageRep, forKey: &#34;savedImage&#34;)


    do{
      try context.save()
    }catch{
      print(&#34;Failed&#34;)
    }
</code></pre>

<p>我将如何添加较低级别的数据,一个用于保存一组字符串,一个用于保存一组图像?</p>

<p>我已经尝试了几个小时来构建它,但根本无法弄清楚。 </p>

<p>我希望这些图片可以为我所问的内容添加上下文。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><blockquote>
<p>How would I go about adding a lower level of data, one to hold a group of strings and one to hold a group of images?</p>
</blockquote>

<p>没有一组字符串和一组单独的图像(你怎么知道哪个字符串属于哪个图像?)。 <code>ScannedItem</code> 对象已经包含字符串和图像,因此您应该将 <code>ScannedItem</code> 对象组合在一起以制作相册。 </p>

<p>在 CoreData 术语中,您将创建一个新实体 <code>Album</code>。该实体可能有自己的属性,例如 <code>albumName</code> 或 <code>albumDescription</code>,以及表示专辑中 <code>ScannedItems</code> 的关系。由于 <code>Album</code> 是许多 <code>ScannedItems</code> 的集合,因此关系将是“对多”的。</p>

<p>在 CoreData 中,如果您定义从一个实体到另一个实体的关系,您也应该始终创建反向关系。要问自己的问题是每个 <code>ScannedItem</code> 是否可以在多个 <code>Album</code> 中?如果是这样,反比关系也是“对多”的;如果不是,则逆是“对一”。</p>

<p>默认情况下,CoreData 将一对多关系中的对象集合表示为一个 Set。这有两个后果:</p>

<ul>
<li>首先,集合中的对象没有隐式排序。如果顺序很重要,您可以使关系“有序”(在这种情况下 CoreData 使用有序集),或者您可以在访问关系。如果用户可以选择 <code>Album</code> 中的顺序,您可能需要通过添加 <code>sortOrder</code> 属性来显式建模排序顺序。如果从 <code>ScannedItem</code> 到 <code>Album</code> 的关系是一对一的关系,这很容易,但如果关系是对多的,则 <code>ScannedItem</code> 可能是一个<code>Album</code>中的第一张图片,但另一个<code>Album</code>中的最后一张图片。</li>
<li>其次,一个集合只能容纳一个给定的对象一次。因此,<code>Album</code> 不能多次包含相同的 <code>ScannedItem</code>。</li>
</ul>

<p>每个解决方案都是一样的:创建一个<em>第三个​​</em>实体,你可以称之为<code>AlbumScanReference</code>,它有一个<code>sortOrder</code>属性,与 <code>Album</code> 的一对一关系以及与 <code>ScannedItem</code> 的一对一关系。反向关系都是对多的:一个 <code>Album</code> 可以有很多 <code>AlbumScanReferences</code> 并且一个 <code>ScannedItem</code> 也可以有很多 <code>AlbumScanReferences</code>.</p>

<p>如果 <code>myScan1</code> 是 <code>album1</code> 中的第一项和 <code>album2</code> 中的第七项,您将创建两个 <code>AlbumScanReferences</code> :</p>

<pre><code>let reference1 = ....
reference1.scannedItem = myScan1
reference1.album = album1
reference1.sortOrder = 1

let reference2 = ....
reference2.scannedItem = myScan1
reference2.album = album2
reference2.sortOrder = 7
</code></pre>

<p>同样,如果 <code>myScan2</code> 是 <code>album1</code> 中的第二项和第八项,您将有两个 <code>AlbumScanReferences</code>:</p>

<pre><code>let reference3 = ....
reference3.scannedItem = myScan2
reference3.album = album1
reference3.sortOrder = 2

let reference4 = ....
reference4.scannedItem = myScan2
reference4.album = album1
reference4.sortOrder = 8
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 核心数据 - 创建附加属性或结构化数据,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/38156975/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/38156975/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 核心数据 - 创建附加属性或结构化数据