swift - 核心数据在存在时更新现有对象

标签 swift core-data

我创建了一个表:键,值。

它只是为了保存一些参数,当键不存在时,我会插入,但当它存在时,我会更新值。

在我的例子中,当键已经存在时,它会在 ma 表中执行另一个插入,键等于 nil:

public static func insertValueWithKey(context: NSManagedObjectContext, key:String, value:String){

    let fetchRequest : NSFetchRequest<NSFetchRequestResult>

    if #available(iOS 10.0, *) {
        fetchRequest = Params.fetchRequest()
    } else {
        fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Params")
    }

    let predicate = NSPredicate(format: "key=%@", key)
    fetchRequest.predicate = predicate

    do {
        let results = try context.fetch(fetchRequest)

        if(results.count != 0){

            let paramsDescription = NSEntityDescription.entity(forEntityName: "Params", in: context)


            let params = NSManagedObject(entity: paramsDescription!, insertInto: context) as! Params


            params.value = value

            do {
                try context.save()
            } catch let error as NSError {
                print ("Error first demande insertion \(error)")
            }

        } else if (results.count == 0) {

            let params = NSEntityDescription.insertNewObject(forEntityName: "Params", into: context) as! Params

            params.key = key
            params.value = value

            context.insert(params)

            do {
                try context.save()
            } catch let error as NSError {
                print ("Error first demande insertion \(error)")
            }
        }


    } catch {
        let fetchError = error as NSError
        print(fetchError)
    }

}

我不明白为什么,因为它在模拟器上也能正常工作,但在设备上却不行...

最佳答案

替换:

    let params = NSManagedObject(entity: paramsDescription!, insertInto: context) as! Params

    let params = results.last as! Params

NSManagedObject(entity: insertInto:) 在功能上与 NSEntityDescription.insertNewObject(forEntityName:into:)

相同

关于swift - 核心数据在存在时更新现有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41570321/

相关文章:

ios - performBlockAndWait 在 iOS 7 上具有私有(private)队列死锁父级的子上下文

ios - 在模型层过滤 NSFetchedResultsController

iphone - 在一个 View 中创建 NSManagedObject 并保存在另一个 View 中

ios - 为什么不在 NSUserDefaults 中存储密码是显而易见的?

ios - 关于通过 Swift 进行 IOS 开发中的 GUI 的初学者问题很少?

ios - iAd Banner swift,添加 iAd 后游戏开始崩溃

ios - 上下文类型 'NSFastEnumeration' 不能与数组文字一起使用

swift - 我怎样才能制作一个可以让另一个物理体穿过的物理体

ios - 如何在 Swift 中设置游戏循环

iphone - 如何将核心数据包含到 Xcode 中已创建的 iOS 项目中?