【问题标题】:Trying to extract a row of data from Parse into an array in Swift试图从 Parse 中提取一行数据到 Swift 中的数组中
【发布时间】:2015-10-22 20:03:14
【问题描述】:

我正在尝试将 Parse 类中的数据提取到我的 Swift 项目中。我一般都在挣扎,因为我还在学习,但我至少已经到了查询成功执行并返回结果的地步。问题是数据只存在于循环对象的 for 循环中。尝试向 Parse 对象值追加数组或设置变量失败。任何想法将不胜感激,谢谢!

//Declare variables that should exist outside the query
    var parseArray : [Double] = Array() //the array to store the results
    var parseResult1 : Double = Double() //the variable to store one of the data points from the parse class
    let parseResults = PFObject(className:"parseResults")

    //declare query variable and run query
    let parseResultsQuery = PFQuery(className:"parseResults")
    parseResultsQuery.whereKey("username", equalTo: (PFUser.currentUser()?.username)!)
        parseResultsQuery.findObjectsInBackgroundWithBlock {
            (objects, error: NSError?) -> Void in
            if error == nil {
                for object in objects!{ //looping through returned data
                    print("no error in Parse lookup")
                    parseResult1 = object["parseResult1"] as! Double
                    print("Parse result in object loop: \(parseResult1)")
                    parseArray.append(parseResult1)
                }
            } else {
                print(error)
            }
        }
    print("Parse result outside of loop: \(parseResult1)")
    print(parseArray)

parseResult1 变量在“for object in objects”循环(例如 7.0)中显示该值,但在循环之外,该值不存储并显示为 0.0。理想情况下,我想将与用户名键匹配的所有 Parse 值存储在 Swift 数组中,但此时我会满足于将对象一一拉出!

【问题讨论】:

  • 您已关闭findObjectsInBackgroundWithBlock { (objects, error: NSError?) -> Void in。当您调用它时,程序不会等待它结束并继续下一步。你的 parseResult1 是一个本地对象,当你关闭体被调用时,你已经离开了 paren 方法,当你从闭包体中退出时,本地对象被破坏并且它不会保存你的解析数据。您需要为您在此处编写的代码创建全局对象,例如全局对象

标签: ios arrays swift parse-platform


【解决方案1】:

你有闭包:

... findObjectsInBackgroundWithBlock { (objects, error: NSError?) -> Void in...

当您调用它时,程序不会等待它结束并继续下一步。 你的对象:

var parseArray : [Double] = Array() //the array to store the results
var parseResult1 : Double = Double() //the variable to store one of the data points from the parse class
let parseResults = PFObject(className:"parseResults")

是它的本地对象,当你的闭包体被调用时,你已经离开了父方法,当你从闭包体退出时,本地对象被销毁并且它不会保存你的解析数据。您需要为您在此处编写的函数创建全局对象。

【讨论】:

    【解决方案2】:

    从闭包中取出解析逻辑并调用私有方法,将对象属性传递给该方法。更好的形式,并会解决您的问题:

    func parseResults(objects: Array<PFOject>){
    
        for object in objects!{ //looping through returned data
                        print("no error in Parse lookup")
                        parseResult1 = object["parseResult1"] as! Double
                        print("Parse result in object loop: \(parseResult1)")
                        parseArray.append(parseResult1)
        }
    
    }
    

    然后在检查错误后在闭包中调用它。

    注意:未经测试的代码 - 可能需要一些小的调整。

    【讨论】:

    • 没问题 - 当你有机会时,请接受答案。谢谢!! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    相关资源
    最近更新 更多