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

时间:2015-02-06 10:13:40

标签: ios swift core-data xcode6

我已经创建了一个新实体并将其保存。然后我想从第一个实体获取最后一个插入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中的现有数据进行谓词以达到匹配目的。

请指教。谢谢。

2 个答案:

答案 0 :(得分:2)

你神奇地向核心数据询问最新的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)

答案 1 :(得分:0)

斯威夫特 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() 中,我们只是存储更新后的值。