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 }