我正在使用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")])
}
非常感谢您的协助!
答案 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)
}