我正在开发一个使用Core Data编写的Swift应用程序。为了使其正常工作,我需要删除Core Data中针对特定实体和密钥的所有对象。我已经能够找到许多不同的问题,包括从核心数据中删除,但据我所知,它们都不会删除特定密钥的对象。
我当前的代码遵循与this article.中的“获取,删除,重复”方法类似的风格。它讨论了使用NSBatchDeleteRequest
执行此操作的iOS 9更新方式,但我还没有发现任何制作其中任何一个的方法只删除特定键的值。
当前删除代码(我试图在对象中添加一个键,但是它会抛出一个错误,指出无法在运行时将NSCFNumber
强制转换为NSManagedObject
getContext().delete(object.value(forKey: key) as! NSManagedObject)
与核心数据有关的完整代码
func getContext () -> NSManagedObjectContext {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
return appDelegate.persistentContainer.viewContext
}
func coreDataReplaceValue(entity: String, key: String, value: Int) {
let fetchRequest:NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName: entity)
do {
let searchResults = try getContext().fetch(fetchRequest)
for object in searchResults as! [NSManagedObject] {
getContext().delete(object.value(forKey: key) as! NSManagedObject)
}
} catch {
print("Error with request: \(error)")
}
let context = getContext()
let entity = NSEntityDescription.entity(forEntityName: entity, in: context)
let accelerationLevel = NSManagedObject(entity: entity!, insertInto: context)
accelerationLevel.setValue(value, forKey: key)
do {
try context.save()
print("saved!")
} catch let error as NSError {
print("Could not save \(error), \(error.userInfo)")
} catch {
}
}
我看过的其他问题与我的问题有关,但不包括添加密钥的方法:
Swift 3 Core Data Delete Object
delete core data managed object with Swift 3
最后一个看起来很有希望,但代码将其更改为NSManagedObject,所以我不认为它有解决方案。
Deleting first object in Core Data (Swift)
感谢您的帮助!
泰勒