【问题标题】:Core Data update result valuesCore Data 更新结果值
【发布时间】:2017-09-19 09:10:05
【问题描述】:

我正在尝试在 coreData 中保存 moveRowAt 上的对象列表。我将我的数据保存在一个单例中,它的顺序很好,但是当我更新 Core Data 时,它从未保存过,而且顺序错误。

func changeKrakenPosition(source: Int, destiny: Int){

    let context = appDelegate.persistentContainer.viewContext
    do {
        var results = try context.fetch(fetchRequest)
        var source = source
        var destiny = destiny
        var destinyItem = results[destiny]
        var sourceItem = results[source]

        if source < destiny {
            var dif = destiny - source
            for i in 0...dif {
                if i != dif {
                    var krakenCoreDataToMove = results[source+1]
                    results[source] = krakenCoreDataToMove
                    source += 1
                } else {
                    results[source] = destinyItem
                }
            }
            results[destiny] = sourceItem
        } else if destiny < source {
            var dif = source - destiny
            for i in 0...dif {
                if i !=  dif{
                    var krakenCoreDataToMove = results[source-1]
                    results[source] = krakenCoreDataToMove
                    source -= 1
                } else {
                   results[source] = destinyItem
                }
            }
            results[destiny] = sourceItem
        } else {
            //Moved to same position
        }

        var resultKra = results as! [Kraken]
        for res in resultKra {
            print("name:  \(res.name) age \(res.age)")
        }

        do {
            try context.save()
        }catch{
            //Handle Error
        }

    } catch {
        print("Error with request: \(error)")
    }

}

第一次运行良好但从未保存,我再次输入并将新的第一项移动到最后一个位置,这就是发生的情况

我认为保存 CoreData 可以解决问题,但任何帮助或解决方案都会很棒。

【问题讨论】:

    标签: ios swift swift3


    【解决方案1】:

    我不知道你到底想做什么,但顺便说一下,你可以很容易地订购你的阵列。

    struct CustomObject{
        let i: Int
        let j: String
    }
    
    var array: [CustomObject] = [
        CustomObject(i: 1, j: "1"),
        CustomObject(i: 0, j: "0"),
        CustomObject(i: 3, j: "3"),
                                ]
    
    let newArray = array.sorted { (first, second) -> Bool in
        first.i < second.i
    }
    

    【讨论】:

    • 感谢您的订单解决方案,我想做的是将新结果排序保存到上下文中并保留我的数据,我不知道是否必须修改获取的结果数组或者我有做其他事情,但我无法保存到核心数据中
    • 请检查这篇文章。 stackoverflow.com/questions/11600571/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多