【问题标题】:Delete an NSManaged Object删除一个 NSManaged 对象
【发布时间】:2016-11-22 12:51:14
【问题描述】:

我一直在尝试删除一个 NSManagedObject。 这是我的代码:

    let app = UIApplication.shared.delegate as! AppDelegate
    let context = app.persistentContainer.viewContext
    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "MyEnt")
    request.predicate = NSPredicate(format: "SELF = %@", EnttoDelete.objectID)
    request.returnsObjectsAsFaults = false

    do {
        let results = try context.fetch(request)

        if results.count > 0 {

            for result in results as! [NSManagedObject] {
                print ("Ent found")                    
                context.delete(result)

                 do {
                 try context.save()
                 } catch {
                 print("failed to delete")
                 }

            }

        }


    } catch {

        print ("Error in do")
    }
}

你有没有看到我确实删除了实体 (EnttoDelete),因此它的 ID (EnttoDelete.objectID)。 现在我什至在 stackoverflow 中也进行了研究,我认为这应该可行。但事实并非如此。 如何删除所需的实体?

【问题讨论】:

  • 究竟是什么不起作用? results有内容吗?如果不是,那么您的请求和/或谓词有问题。
  • 是的。我对其他实体做了完全相同的事情,它奏效了。不同之处在于我使用了属性而不是 objectID。在这种情况下它不起作用....但是使用我复制的代码,它可以工作...
  • 您也可以尝试existingObjectWithID获取具有特定ID的实体,然后将其删除。
  • 在 Swift 3 中它将是 existingObject(with objectID: NSManagedObjectID)

标签: swift core-data swift3


【解决方案1】:

我想我对此进行了排序,做了不同的事情:

    let app = UIApplication.shared.delegate as! AppDelegate
    let context = app.persistentContainer.viewContext
    var thisID: NSManagedObjectID = (thatLand?.objectID)!
    let object = context.object(with: thisID)
    context.delete(object)

    do {
        try context.save()
    } catch {
        print("failed to delete")
    }

我认为这是更好的解决方案。不过不确定!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    相关资源
    最近更新 更多