ios – Swift 3核心数据删除对象

不幸的是,新的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)做了一个“硬”调试,它显示了我正确的对象.
所以我只需要删除它.

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

解决方法

在您的情况下,获取的结果是一系列受管对象
[Event],所以你可以枚举数组并删除所有匹配的对象.
示例(使用try?而不是try!来避免在这种情况下崩溃
提取错误):
if let result = try? context.fetch(fetchRequest) {
    for object in result {
        context.delete(object)
    }
}

如果没有匹配的对象存在,则获取成功,但结果
数组为空.

注意:在代码中,对象的类型为[Event],因此在

context.delete(object)

编译器创建一个调用

public func delete(_ sender: AnyObject?)

NSObject的方法而不是预期的

public func delete(_ object: NSManagedobject)

NSManagedobjectContext的方法.这就是为什么你的代码编译但在运行时失败.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...