我正在开发一个项目,用户可以在该项目中保存带有标题和标题的图像,然后使用 Core Data 保存它。我遇到的问题是尝试添加一个相册,用户可以在其中保留类似的图像和标题。我是 CoreData 的新手,整天都在查看文档和梳理 Stackoverflow。
我附上了我正在寻找的基本布局的图像(当然不是艺术家)。 Layout
我还附上了一张我认为数据结构应该是什么样子的图片。 Data Structure
带有红色标签的部分是我在构建时遇到的问题。我已经构建了我认为是数据结构的“顶层”层。
let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let context: NSManagedObjectContext = appDel.managedObjectContext
let saveData = NSEntityDescription.insertNewObjectForEntityForName("ScannedItem", inManagedObjectContext: context)
let imageRep = UIImagePNGRepresentation(image)!
saveData.setValue(textTitle, forKey: "savedTitle")
saveData.setValue(scannedText, forKey: "savedText")
saveData.setValue(imageRep, forKey: "savedImage")
do{
try context.save()
}catch{
print("Failed")
}
我将如何添加较低级别的数据,一个用于保存一组字符串,一个用于保存一组图像?
我已经尝试了几个小时来构建它,但根本无法弄清楚。
我希望这些图片可以为我所问的内容添加上下文。
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?
没有一组字符串和一组单独的图像(你怎么知道哪个字符串属于哪个图像?)。 ScannedItem
对象已经包含字符串和图像,因此您应该将 ScannedItem
对象组合在一起以制作相册。
在 CoreData 术语中,您将创建一个新实体 Album
。该实体可能有自己的属性,例如 albumName
或 albumDescription
,以及表示专辑中 ScannedItems
的关系。由于 Album
是许多 ScannedItems
的集合,因此关系将是“对多”的。
在 CoreData 中,如果您定义从一个实体到另一个实体的关系,您也应该始终创建反向关系。要问自己的问题是每个 ScannedItem
是否可以在多个 Album
中?如果是这样,反比关系也是“对多”的;如果不是,则逆是“对一”。
默认情况下,CoreData 将一对多关系中的对象集合表示为一个 Set。这有两个后果:
Album
中的顺序,您可能需要通过添加 sortOrder
属性来显式建模排序顺序。如果从 ScannedItem
到 Album
的关系是一对一的关系,这很容易,但如果关系是对多的,则 ScannedItem
可能是一个Album
中的第一张图片,但另一个Album
中的最后一张图片。Album
不能多次包含相同的 ScannedItem
。每个解决方案都是一样的:创建一个第三个实体,你可以称之为AlbumScanReference
,它有一个sortOrder
属性,与 Album
的一对一关系以及与 ScannedItem
的一对一关系。反向关系都是对多的:一个 Album
可以有很多 AlbumScanReferences
并且一个 ScannedItem
也可以有很多 AlbumScanReferences
.
如果 myScan1
是 album1
中的第一项和 album2
中的第七项,您将创建两个 AlbumScanReferences
:
let reference1 = ....
reference1.scannedItem = myScan1
reference1.album = album1
reference1.sortOrder = 1
let reference2 = ....
reference2.scannedItem = myScan1
reference2.album = album2
reference2.sortOrder = 7
同样,如果 myScan2
是 album1
中的第二项和第八项,您将有两个 AlbumScanReferences
:
let reference3 = ....
reference3.scannedItem = myScan2
reference3.album = album1
reference3.sortOrder = 2
let reference4 = ....
reference4.scannedItem = myScan2
reference4.album = album1
reference4.sortOrder = 8
关于ios - 核心数据 - 创建附加属性或结构化数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38156975/
欢迎光临 OGeek|极客世界-中国程序员成长平台 (https://ogeek.cn/) | Powered by Discuz! X3.4 |