Swift 3核心数据删除对象

不幸的是,新的核心数据语义使我疯狂。 我以前的问题有一个干净的代码,因为不正确的自动生成头文件不起作用。 现在我继续我的工作,删除对象。 我的代码似乎很简单:

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)做了一个“硬”的debugging,它向我展示了正确的对象。 所以我只需要删除它。

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

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

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

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


注意:在你的代码中, object的types是[Event] ,因此是in

 context.delete(object) 

编译器创build一个调用

 public func delete(_ sender: AnyObject?) 

方法的NSObject而不是预期的

 public func delete(_ object: NSManagedObject) 

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

[swift 3]这里的诀窍是删除对象后保存上下文。

 let fetchRequest: NSFetchRequest<Profile> = Profile.fetchRequest() fetchRequest.predicate = Predicate.init(format: "profileID==\(withID)") let object = try! context.fetch(fetchRequest) context.delete(object) do { try context.save() // <- remember to put this :) } catch { // Do something... fatalerror } 

我希望这可以帮助别人。

删除核心数据对象swift 3

 // MARK: Delete Data Records func deleteRecords() -> Void { let moc = getContext() let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Person") let result = try? moc.fetch(fetchRequest) let resultData = result as! [Person] for object in resultData { moc.delete(object) } do { try moc.save() print("saved!") } catch let error as NSError { print("Could not save \(error), \(error.userInfo)") } catch { } } // MARK: Get Context func getContext () -> NSManagedObjectContext { let appDelegate = UIApplication.shared.delegate as! AppDelegate return appDelegate.persistentContainer.viewContext }