【问题标题】:Swift - How to get last insert id in Core Data, store it in NSUserDefault and predicateSwift - 如何在 Core Data 中获取最后一个插入 ID,将其存储在 NSUserDefault 和谓词中
【发布时间】:2015-02-06 10:13:39
【问题描述】:

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

【问题讨论】:

    标签: ios swift core-data xcode6


    【解决方案1】:

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

    【讨论】:

    • 那么如何找回呢?
    • 反之亦然..虽然注意!我是内联代码写的,所以可能有错别字
    • 另外一件事,是否可以根据对象 ID 删除对象?
    • 可以,根据id获取对象然后删除,例如:stackoverflow.com/questions/21050372/…
    • @Daij-Djan :它不起作用,因为我们正在保存临时 ID 并使用临时 ID 获取。所以对象没有永久ID
    【解决方案2】:

    斯威夫特 5

    核心数据中没有这个功能可以获取最后保存的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() 中,我们只是存储更新后的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      • 2015-03-08
      相关资源
      最近更新 更多