我已经创建了一个新实体并将其保存。然后我想从第一个实体获取最后一个插入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中的现有数据进行谓词以达到匹配目的。
请指教。谢谢。
答案 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() 中,我们只是存储更新后的值。