更新 NSManagedObjects 数组

Update an Array of NSManagedObjects

我正在使用 CoreData 和 swift 并尝试更新 NSManagedObjects 数组。但是,当我尝试时收到 "Value of type '[NSManagedObject]' has no member 'setValue'" 在上下文中更新记录中的两个键。 我正在使用以下代码行来执行更新: "erManagedObject.setValue([(true, forKey: "aKey"),(false, forKey: "anotherKey")])"

public func updateRecordsForEntityManagedObject(_ entity: String, erManagedObject: [NSManagedObject]){
// Create the Fetch Request
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: entity)
let recordCount =  erManagedObject.count
     print(" Total Records: \(recordCount)")
     for i in 1...recordCount {
        // I receive the error here
        erManagedObject.setValue([(true, forKey: "aKey"),(DateUtilities().getTimestamp(), forKey: "timeStampKey")])
     }

非常感谢任何帮助!

erManagedObject 是一个 NSManagedObject 数组。 (更新)——你错误地使用了 setValue 方法,它不应该接受一个数组。查看文档

https://developer.apple.com/documentation/coredata/nsmanagedobject/1506397-setvalue

我觉得你想做

erManagedObject[i].setValue...

注意:您的 for 循环将崩溃,因为您的数组将越界..您的 for 循环应从 0 开始迭代..< erManagedObjects.count

 for i in 0 ..< recordCount {
    erManagedObject[i].setValue...
 }

或者...

for managedObject in erManagedObject {
  managedObject.setValue...
}

替换

 for i in 1...recordCount {
    // I receive the error here
    erManagedObject.setValue([(true, forKey: "aKey"),(false, forKey: "anotherKey")])
 }

erManagedObject.forEach { 
   [=11=].setValue(true, forKey: "aKey")
   [=11=].setValue(false, forKey: "anotherKey")
}

因为你应该使用循环项 setValue 而不是数组本身


 let request = NSFetchRequest<NSFetchRequestResult>(entityName:entity)

    do {
         let result = try context.fetch(request) as! [ModelName]
         result.forEach {
           [=12=].someKey = ""
         }
         // save context here  
     }
     catch {
       print(error)
    }