ios - Swift 中的核心数据 : Only saving last object in a for loop

标签 ios swift for-loop core-data

我正在尝试将核心数据中的多个对象保存到for中的IPOdSongs实体中。循环,即当前for song in result{}中的歌曲标题环形。但我的代码只保存循环中的最后一首歌曲,并且只是不断覆盖同一个对象。我需要每次创建一个新对象,而不是覆盖同一个对象。我做错了什么?

func fetchiPodSongsOnSignup() {

        var appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

        var context: NSManagedObjectContext = appDel.managedObjectContext!

        var newSong = NSEntityDescription.insertNewObjectForEntityForName("IPodSongs", inManagedObjectContext: context) as! NSManagedObject

        var request = NSFetchRequest(entityName: "IPodSongs")

        request.returnsObjectsAsFaults = false

        var results = context.executeFetchRequest(request, error: nil)


        let query = MPMediaQuery.songsQuery()

        let result = query.collections as! [MPMediaItemCollection]

        for song in result {

            for song in song.items as! [MPMediaItem] {

                newSong.setValue("\(song.valueForProperty(MPMediaItemPropertyTitle))", forKey: "title")

                println(newSong)

                context.save(nil)

            }
        }    

最佳答案

您不需要创建请求来将新对象保存到核心数据。您做错的是创建一个托管对象,插入它,然后通过循环更改它,而不是为每首歌曲创建一个新对象。

这应该有效:

func fetchiPodSongsOnSignup() {

    var appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

    var context: NSManagedObjectContext = appDel.managedObjectContext!


    let query = MPMediaQuery.songsQuery()

    let result = query.collections as! [MPMediaItemCollection]

    for song in result {

        for song in song.items as! [MPMediaItem] {

            var newSong = NSEntityDescription.insertNewObjectForEntityForName("IPodSongs", inManagedObjectContext: context) as NSManagedObject

            newSong.setValue("\(song.valueForProperty(MPMediaItemPropertyTitle))", forKey: "title")

            println(newSong)


        }
    }
    if context.save(&errorPointer == false {
        printlin("Error received while saving")
    }

}

同时将 if context.save(&errorPointer == false {printlin("Error returned while saving")} 放在最后。

关于ios - Swift 中的核心数据 : Only saving last object in a for loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35846305/

相关文章:

ios - NSURLConnection/AFNetworkingOperation 未使用 NSURLCache

ios - 错误处理程序未调用 promise

arrays - 如何在for循环中正确删除数组元素

ios - KVO和ARC如何移除Observer

ios - 使用 sendAsynchronousRequest :queue:completionHandler: 时显示 'data loading'

swift - 按字符串化 JSON 数组属性中包含的值过滤图层

ios - 在 Controller Swift 之间传递对象

python - 如何使用 ParameterGrid 将多个列表作为输入,遍历所有组合并将结果输入到函数以测试所有选项

c - 将字符单独分配给数组时为 "assignment makes integer from pointer without a cast"

ios - 调用内容类型为 : application/x-www-form-urlencoded and Authorization using NSURLSession 的 REST API