在Core Data中,如何在swift 4中执行`if exists update else insert`? [复制]

Posted

技术标签:

【中文标题】在Core Data中,如何在swift 4中执行`if exists update else insert`? [复制]【英文标题】:In Core Data, how to do `if exists update else insert` in swift 4? [duplicate] 【发布时间】:2018-03-26 06:58:34 【问题描述】:

我是核心数据的新手。我只想检查核心数据中是否存在记录,然后更新其他插入。我可以插入、获取删除数据但无法更新。这是我的一段代码

var context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
var user = [Users]()
func insertData() 

    let newUser = NSEntityDescription.insertNewObject(forEntityName: "Users", into: context)//entity(forEntityName: "Users", in: context)
    newUser.setValue("chatt", forKey: "name")
    newUser.setValue("100", forKey: "balance")
    newUser.setValue("123", forKey: "user_id")
    do 

        try context.save()

     catch 

        print("Failed saving")
     

请帮我更新代码sn-p

【问题讨论】:

***.com/a/38459233/5461400 你可以参考我的回答here 这已被错误地审核 - 如果它是重复的,请引用重复的答案。 Devbot10 的答案是对另一个问题的回答——如何更新以前存在的核心数据对象——这不是这个问题的答案。 【参考方案1】:

试试这个:

var fetchRequest = NSFetchRequest(entityName: "Users")
fetchRequest.predicate = NSPredicate(format: "userName = %@", userName)

if let fetchResults = appDel.managedObjectContext!.executeFetchRequest(fetchRequest, error: nil) as? [NSManagedObject] 
    if fetchResults.count != 0 
        // update
        var managedObject = fetchResults[0]
        managedObject.setValue(accessToken, forKey: "accessToken")

        context.save(nil)
     else 
        //insert as new data
    

干杯:)

【讨论】:

先生,它显示 NSFetchRequestResults 没有成员“计数”

以上是关于在Core Data中,如何在swift 4中执行`if exists update else insert`? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Core Data 中使用 swift 4 Codable?

如何在 Core Data 中使用 swift 4 Codable?

IOS Swift Core Data如何在propertiesToFetch中添加不在propertiesToGroupBy中的字段

如何在 Swift 中的 Core Data 中保存多个项目

如何使用 Swift 在 Core Data 中组合属性?

如何在 Core Data iOS Swift 中删除和更新结构类型数组?