小编典典

Swift 3核心数据删除对象

swift

不幸的是,新的Core
Data语义使我发疯。我之前的问题有一个干净的代码,因为头文件的自动生成不正确,因此无法正常工作。现在,我继续删除对象的工作。我的代码似乎很简单:

func deleteProfile(withID: Int) {
    let fetchRequest: NSFetchRequest<Profile> = Profile.fetchRequest()
    fetchRequest.predicate = Predicate.init(format: "profileID==\(withID)")
    let object = try! context.fetch(fetchRequest)
    context.delete(object)
}

我用print(object)代替进行了“硬”调试,context.delete(object)它向我展示了正确的对象。所以我只需要删除它。

PS没有deleteObject。现在NSManagedContext只有public func delete(_ sender: AnyObject?)


阅读 246

收藏
2020-07-07

共1个答案

小编典典

在您的情况下,提取的结果是托管对象 的
数组[Event],因此您可以枚举该数组并删除所有匹配的对象。示例(在提取错误的情况下使用try?而不是try!避免崩溃):

if let result = try? context.fetch(fetchRequest) {
    for object in result {
        context.delete(object)
    }
}

如果不存在匹配的对象,则提取成功,但是结果数组为空。


注意: 在您的代码中,object具有类型[Event],因此在

context.delete(object)

编译器创建对

public func delete(_ sender: AnyObject?)

的方法NSObject而不是预期的

public func delete(_ object: NSManagedObject)

的方法NSManagedObjectContext。这就是为什么您的代码可以编译但在运行时失败的原因。

2020-07-07