【问题标题】:Swift - Core Data Relationship - Album StyleSwift - 核心数据关系 - 专辑风格
【发布时间】:2016-07-03 18:52:12
【问题描述】:

我这几天一直致力于建立有效的 Core Data 关系。我已经取得了一些进展,但没有什么实质性的进展,所以我希望比我更聪明的人能够解决这个问题并帮助我。

就上下文而言,我本质上是在创建一个相册应用程序。在相册里面,会有照片,每张照片都有一个标题。我构建了一个实体“ScannedItem”,它具有“savedTitle”、“savedText”和“savedImage”属性。

savedTitle = 图片的标题。

savedText = 图片的标题。

savedImage = 图片本身。

我不确定如何将“ScannedItem”(包含先前属性的实体)添加到我的“相册”实体中。

有关详细信息,“ScannedItem”及其所有属性可能仅在一个相册中,因此我认为这将是“一对一”的关系。

我在这里包含了我如何构建我的实体和关系的图片。

下面是我保存“扫描项目实体”的代码。

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")
    }

我将如何将该 ScannedItem 保存到相册?几天来我一直在为代码苦苦挣扎,这几乎让我发疯了。任何帮助将不胜感激。是时候问问专家了。

更新

 do{



        let request = NSFetchRequest(entityName: "ScannedItem")
        let results = try context.executeFetchRequest(request)


        let saveAlbum = NSEntityDescription.insertNewObjectForEntityForName("Album", inManagedObjectContext: context)

        saveAlbum.setValue(results, forKey: "album")


        let albumRequest = NSFetchRequest(entityName: "Album")
        let albumResults = try context.executeFetchRequest(albumRequest)

        if albumResults.count > 0{

        for item in albumResults as! [NSManagedObject]{

            let albumPrint = item.valueForKey("album")

            print("Album Test: " + (albumPrint! as! String))


        }
    }

        if results.count > 0{


            for item in results as! [NSManagedObject]{

                let titleSaved = item.valueForKey("savedTitle")
                let textSaved = item.valueForKey("savedText")
                //let imageSaved = item.valueForKey("savedImage")
                //let titleSaved = item.valueForKey("savedTitle")

                print("Title" + (titleSaved! as! String))
                print("Text" + (textSaved! as! String))
                //print(imageSaved!)



            }


        }


    }catch{
        print("Failed")
    }

现在我收到一条错误消息,指出“实体专辑不符合键“专辑”的键值编码。我不知道该怎么办,我已经玩了好几个小时了。

【问题讨论】:

    标签: ios swift core-data entity relationship


    【解决方案1】:

    Album 上,将scanItem 更改为scanItems 并设置为多对多,因为您可以在一个相册中拥有许多项目。

    albumRelationship 更改为 album 并将其设置为一。

    您需要知道或获取要添加到的相册,然后进行设置:

    saveData.setValue(album, forKey: "album")
    

    核心数据会自动为你设置关系的另一端。

    【讨论】:

    • 我已按照您的所有指示进行操作,并更新了我的问题。感谢您的帮助。我正在为此失去理智。
    • 专辑与专辑没有关系——它是一张专辑。相册有一组项目。每个项目都有一个专辑。这是双向关系的本质。您应该生成托管对象子类,以便您可以看到它们的属性(mogenerator)
    猜你喜欢
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多