不幸的是,新的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?)
在您的情况下,提取的结果是托管对象的数组[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
。这就是为什么您的代码可以编译但在运行时失败的原因。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句