Swift - 如何在 Core Data 中获取最后插入的 id,将其存储在 NSUserDefault 和谓词中

Swift - How to get last insert id in Core Data, store it in NSUserDefault and predicate

我已经创建了一个新实体并保存了它。然后我想从第一个实体中获取最后一个插入 ID,然后将其作为参考 ID 保存到第二个实体中。

let appDel: AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)

        let userContext: NSManagedObjectContext = appDel.managedObjectContext!
        let userEn = NSEntityDescription.entityForName("UserEntity", inManagedObjectContext: userContext)

        var newUser =  Users(entity: userEn!, insertIntoManagedObjectContext: userContext)

        newUser.uname = "Nurdin"

        userContext.save(nil)

那么如何将最后插入的id保存到NSUserDefault中呢?因为我想用 CoreData 中的现有数据进行谓词以进行匹配。

你神奇地向核心数据询问最新的id...

但以你为例。只需在保存后添加一行以存储ID...

    let string = user.objectID.URIRepresentation().absoluteString
    NSUserDefaults.standardUserDefaults().setObject(string, forKey: "userID")

...反之亦然...

    let oidString = NSUserDefaults.standardUserDefaults().stringForKey("userID")
    let url = NSURL(string: oidString)
    let objectID = persistentStoreCoordinator.managedObjectIDForURIRepresentation(url)

Swift 5

core data中没有这种获取最后保存的Id的功能,但是可以通过NSUserDeafult

这里我们创建了两个函数用于保存和检索最后保存的 ID。

fileprivate func getLastId() -> Int {
    let objUserDefault = UserDefaults.standard
    if let userID =  objUserDefault.value(forKey: "TaskId") as? Int {
        print(userID + 1)
        return userID + 1
    }
    return 1
} 
fileprivate func setTaskId(id: Int) {
    let objUserDefault = UserDefaults.standard
    objUserDefault.setValue(id, forKey: "TaskId")
    objUserDefault.synchronize()
}

在 getLastId() 中,我们正在检索 id 并增加 1 以保存当前记录。如果它是第一次保存,它会给你 1.

在 setTaskId() 中,我们只是存储更新后的值。