【问题标题】:How to get objectId immediately after save data with Parse and swift如何在使用 Parse 和 swift 保存数据后立即获取 objectId
【发布时间】:2015-01-27 22:29:54
【问题描述】:
    var cardObject = PFObject(className: "YourCard")
    cardObject["cardNumber"] = cardNumber
    cardObject["balance"] = balance
    cardObject["expire"] = date
    cardObject["validFlg"] = cardStatus
    cardObject.saveInBackgroundWithBlock {
        (success: Bool!, error: NSError!) -> Void in
        if (success != nil) {
            NSLog("Object created with id: \(cardObject.objectId)")
        } else {
            NSLog("%@", error)
        }
    }
    dbId = cardObject.objectId

我无法获取 objectId,我该如何获取它? 非常感谢您。

【问题讨论】:

  • 为什么你得不到objectId?你有什么错误吗?
  • Christian Woerz 是这么说的。
  • 我花了一分钟时间来理解块内部发生了什么。该块仅在后台任务完成后才执行其中的代码。但是您的其余代码将继续运行。因此,当您在外部进行提取时,它很可能会在保存发生之前提取数据。

标签: swift parse-platform


【解决方案1】:

正如你的函数名称已经说过的那样,它是一个称为异步的函数。这意味着主线程不会等待函数完成。所以你会得到一个(仍然)空的objectId。

要在 saveInBackground 完成后获取您的 objectID,您必须将获取 ID 的行放入 if 子句中。

 var cardObject = PFObject(className: "YourCard")
    cardObject["cardNumber"] = cardNumber
    cardObject["balance"] = balance
    cardObject["expire"] = date
    cardObject["validFlg"] = cardStatus
    cardObject.saveInBackgroundWithBlock {
        (success: Bool!, error: NSError!) -> Void in
        if (success != nil) {
            NSLog("Object created with id: \(cardObject.objectId)")
            //Gets called if save was done properly
            dbId = cardObject.objectId

        } else {
            NSLog("%@", error)
        }
    }

另一种选择是在主线程中调用save()。这样,函数在您调用 objectId 之前完成。 Parse 不建议这样做,但有可能:

cardObject.save()
dbId = cardObject.objectId

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 2011-11-07
    • 2016-02-05
    相关资源
    最近更新 更多