Core data swift3中的核心数据条目未正确更新

Core data swift3中的核心数据条目未正确更新,core-data,swift3,xcode8,Core Data,Swift3,Xcode8,我有一个核心数据条目,其中包含从API获取的数据库中存储的某些键和值。现在我想用更新后的值更新一些核心数据条目,因此我使用以下代码: func updateAllRecords(responseArray: [Dictionary<String, String>]) { for settingsObject in responseArray { if #available(iOS 10.0, *) { let keys = settingsObje

我有一个核心数据条目,其中包含从API获取的数据库中存储的某些键和值。现在我想用更新后的值更新一些核心数据条目,因此我使用以下代码:

    func updateAllRecords(responseArray: [Dictionary<String, String>]) {
    for settingsObject in responseArray {
    if #available(iOS 10.0, *) {
      let keys = settingsObject.flatMap() { $0.0 as? String }
      let values = settingsObject.flatMap(){ $0.1 as? String}
      let request = NSFetchRequest<ApplicationSettings>(entityName: "ApplicationSettings")

      do {
        let context = persistentContainer.viewContext
        let searchResults = try context.fetch(request)

        for settingsKeys in searchResults {

        if  keys.contains(settingsKeys.key!) {
            settingsKeys.value = values[1]
            try context.save()
          }
        }

      } catch {
        print ("There was an error")
      }

    } else {

        }
  }
  }
}
我从viewcontroller调用此函数,如下所示:

 var dicArray = [Dictionary<String, String>]()
                  let dic1 = ["IS_CIVIL_ID_MANDATORY": "Smith", "TIME_IN_MIN_BEFORE_ENABLING_START_TRIP": "Robert"]
                  dicArray.append(dic1)
                  CoreDataHandler.sharedInstance.updateAllRecords(responseArray: dicArray)
但是表中的条目没有正确更新键。它为两个键存储相同的值。见下文:

我在这个代码中哪里错了?为什么为键存储相同的值?

您在这里犯了错误
settingsKeys.value=值[1]这里1是静态的

我认为您不需要单独的数组值 用我的代码替换这个代码

for settingsKeys in searchResults {

        if  keys.contains(settingsKeys.key!) 
         {
            settingsKeys.updateValue(settingObject[settingsKeys.key!], forKey:settingsKeys.key!)
            try context.save()
          }
        }

      }
例如演示

func updateAllRecords(responseArray: [Dictionary<String, String>])
{
    for settingsObject in responseArray
    {

            var dic2 = ["IS_CIVIL_ID_MANDATORY": "xyz", "TIME_IN_MIN_BEFORE_ENABLING_START_TRIP": "xyz"]
            let keys = settingsObject.flatMap() {$0.0}
            let values = settingsObject.flatMap(){$0.1}
            let settingKeys = dic2.flatMap() {$0.0}

            for settingsKey in settingKeys
            {

                dic2.updateValue(settingsObject[settingsKey]!, forKey: settingsKey)

            }
            print(keys)
        print(dic2)
    }
}
var dicArray = [Dictionary<String, String>]()
let dic1 = ["IS_CIVIL_ID_MANDATORY": "Smith", "TIME_IN_MIN_BEFORE_ENABLING_START_TRIP": "Robert"]
dicArray.append(dic1)
updateAllRecords(responseArray: dicArray)
输出


[启用开始行程前的时间(分钟):Robert,是否强制使用CIVIL ID:Smith]

settingsKeys.value=values[1]它是静态替换值[1]使用您的值Hello@Chelsea在我的回答中有任何疑问吗?@ChelseaShawra我已经为其创建了演示,检查xyz是否替换为相应的值您还可以使用此设置skeys.value=settingsObject[settingsKeys.key!]更改您的行!好的,如果[Dictionary]被替换为字典数组,那么我能做什么?对不起,我不明白,您能用您想要更新的内容、输入数据和预期输出更新问题吗