使用 Parse 方法 getObjectInBackgroundWithId 将 objectId 从 viewDidLoad 传递给另一个函数不起作用

Posted

技术标签:

【中文标题】使用 Parse 方法 getObjectInBackgroundWithId 将 objectId 从 viewDidLoad 传递给另一个函数不起作用【英文标题】:Passing objectId from viewDidLoad to another function using Parse method getObjectInBackgroundWithId not working 【发布时间】:2015-08-26 20:14:44 【问题描述】:

我是使用 Parse 和 Swift 的初学者。我需要在同一控制器内的另一个函数中更新我的 viewDidLoad 中引用的对象。如何传递当前加载的对象的 objectId 而不必像这样对其进行硬编码:

query.getObjectInBackgroundWithId("8DkYgraEJq") 

这是我的 viewDidLoad 函数:

    override func viewDidLoad() 
       var query = PFQuery(className: "CheckedBaggage")
       query.orderByAscending("createdAt")
       query.whereKey("respondedTo", notEqualTo: true)
       query.getFirstObjectInBackgroundWithBlock 
         (CheckedBaggage: PFObject!, error: NSError!) -> Void in
           if error != nil 
            println("The getFirstObject request failed.")
           else 
            // The find succeeded.

            self.randomBaggageLabel.text = CheckedBaggage.objectForKey("message") as? NSString
            CheckedBaggage.save()

            println(CheckedBaggage.objectId)

            let baggageId = CheckedBaggage.objectId

            println("Successfully retrieved the object.")
        
    

我想尝试将变量 bagId(它应该是对象的 ID 作为字符串)作为参数传递给我的 carryIt 函数中的 getObjectInBackgroundWithId 块:

    @IBAction func carryIt(sender: AnyObject!) 
       println("CarryIt is being called")
       var query = PFQuery(className: "CheckedBaggage")
       query.getObjectInBackgroundWithId(baggageId) 
         (CheckedBaggage: PFObject?, error: NSError?) -> Void in
          if error != nil 
            println(error)
           else if let CheckedBaggage = CheckedBaggage 
            println("object hello!")
            CheckedBaggage["respondedTo"] = true
            CheckedBaggage["response"] = self.kindnessMessage.text
            CheckedBaggage.save()
        
    

但我收到“未解析的标识符”错误。如果我硬编码对象 ID,它会完美地更新我的 Parse 数据库,但我不能这样做。下面是报错截图:

非常感谢您的帮助!

【问题讨论】:

在类级别声明 bagId。它不能在函数之外访问。 很高兴这是一个如此简单的修复。谢谢! 【参考方案1】:

你必须初始化baggageId。要在多个功能中使用它,它必须在类级别的范围内,如评论所述。要在声明后设置它,它必须是“var”,而不是常量“let”。

var baggageId = ""
func viewDidload() 
    var query = ...
    query.get... 
       baggageId = CheckedBaggege.objectId
    



func shipIt() 
    var query = ...
    query.getObjectWithId(baggageId) ...

【讨论】:

以上是关于使用 Parse 方法 getObjectInBackgroundWithId 将 objectId 从 viewDidLoad 传递给另一个函数不起作用的主要内容,如果未能解决你的问题,请参考以下文章

url.parse() 的替换方法new URL(),URl.parse()的使用。

关于JSON.parse()方法的使用说明

如果使用 Parse 主密钥,是不是可以检查 beforeSave 方法内部?

qs.parse()qs.stringify()JSON.parse()JSON.stringify()使用方法

Parse-Server后台搭建与使用进阶篇(二)- Parse-server常见问题及解决方法

Jsoup.parse() 方法的替代方案