更新一个NSManagedObjects数组

时间:2019-03-18 22:01:53

标签: arrays swift core-data nsmanagedobject

我正在使用CoreData和swift,并尝试更新NSManagedObjects数组。但是,当我尝试接收“类型'[NSManagedObject]'的值没有成员'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")])
     }

非常感谢您的协助!

2 个答案:

答案 0 :(得分:1)

erManagedObject是NSManagedObjects的数组。 (更新)-您使用的setValue方法不正确,它不应采用数组。查看文档

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

我想你想做

erManagedObject[i].setValue...

注意:您的for循环将崩溃,因为您的数组将超出范围.. for循环应从0开始迭代..

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

或者...

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

答案 1 :(得分:1)

替换

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

使用

erManagedObject.forEach { 
   $0.setValue(true, forKey: "aKey")
   $0.setValue(false, forKey: "anotherKey")
}

您应该使用循环项来setValue而不是数组本身


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

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