2017-08-04 29 views
0

我有一个核心数据条目,其中某些键和值存储在从API中提取的数据库中。现在我想更新与更新值的一些核心数据条目,为此我使用如下代码:核心数据条目在swift3中未正确更新

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 { 

     } 
    } 
    } 
} 

我打电话从视图 - 控制这个功能是这样的:

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) 

但表中的条目未正确更新密钥。它为两个键存储相同的值。请看下图:

Data base

如果我错了,在这段代码?为什么相同的值存储在键上?

+0

settingsKeys.value =值[1]它是静态的替代值[1]与您的价值 –

+0

你好@Chelsea任何疑问在我的答案? –

回答

1

你犯的错误这里
settingsKeys.value = values[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) 

输出

[ “TIME_IN_MIN_BEFORE_ENABLING_START_TRIP”: “罗伯特”, “IS_CIVIL_ID_MANDATORY”: “史密斯”]

+0

updateValue它是Dictionary的属性吗? –

+0

是的,它是字典的属性 –

+0

@ChelseaShawra我已经创建了它的演示检查“xyz”被替换为相应的值 –