Swift 3核心数据删除键的对象

时间:2016-11-23 03:29:47

标签: ios swift core-data swift3

我正在开发一个使用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)

感谢您的帮助!

泰勒

0 个答案:

没有答案