不幸的是,新的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)它向我展示了正确的对象。所以我只需要删除它。
print(object)
context.delete(object)
PS没有deleteObject。现在NSManagedContext只有public func delete(_ sender: AnyObject?)
deleteObject
public func delete(_ sender: AnyObject?)
在您的情况下,提取的结果是托管对象 的 数组[Event],因此您可以枚举该数组并删除所有匹配的对象。示例(在提取错误的情况下使用try?而不是try!避免崩溃):
[Event]
try?
try!
if let result = try? context.fetch(fetchRequest) { for object in result { context.delete(object) } }
如果不存在匹配的对象,则提取成功,但是结果数组为空。
注意: 在您的代码中,object具有类型[Event],因此在
object
编译器创建对
的方法NSObject而不是预期的
NSObject
public func delete(_ object: NSManagedObject)
的方法NSManagedObjectContext。这就是为什么您的代码可以编译但在运行时失败的原因。
NSManagedObjectContext