【问题标题】:Parse class to fetch data from Parse.comParse 类从 Parse.com 获取数据
【发布时间】:2015-08-22 09:50:38
【问题描述】:

我编写了一个类,其中包含从 Parse.com 获取、更新、添加和删除等方法。

我现在的getFromParse 方法有问题:

class ParseModul {

var returnArray = []



func getFromParse(className:String, whereKey:String, equalTo:String) -> NSArray {


    let query : PFQuery = PFQuery(className: className)
    query.whereKey(whereKey, equalTo: equalTo)


    query.findObjectsInBackgroundWithBlock {
        (objects: [AnyObject]?, error: NSError?) -> Void in

        if error == nil {
            if let objects = objects as? [PFObject] {
                var temp = [PFObject]()

                for object in objects {
                    temp.append(object)
                }
                self.returnArray = temp
                print(self.returnArray) // THIS IS THE DATA FROM PARSE
            }
        } else {
            print("Error: \(error!)")
        }
    }

    print(self.returnArray.count) // THIS IS 0

    if self.returnArray.count > 0 {

        return self.returnArray

    } else {

        self.returnArray = ["nothing"]

        return self.returnArray
    }

}
}

我使用它:

let parse:ParseModul = ParseModul()
let mydata = parse.getFromParse("UserProfile", whereKey: "username", equalTo: "Phil")

该方法总是返回“无”。

【问题讨论】:

  • 了解异步

标签: ios arrays swift parse-platform


【解决方案1】:

您在获取数据之前返回您的数组。 块中获取的数据可能不会在函数中返回。

您可以在自己的块中获取数据;

func getFromParse(className:String, whereKey:String, equalTo:String, completion:(arr:NSArray) -> Void)
 {


    let query : PFQuery = PFQuery(className: className)
    query.whereKey(whereKey, equalTo: equalTo)


    query.findObjectsInBackgroundWithBlock {
        (objects: [AnyObject]?, error: NSError?) -> Void in

        if error == nil {
            if let objects = objects as? [PFObject] {
                var temp = [PFObject]()

                for object in objects {
                    temp.append(object)
                }
                //??self.returnArray = temp
                //??print(self.returnArray) // THIS IS THE DATA FROM PARSE
                completion(temp);
            }
        } else {
            print("Error: \(error!)")
        }
    }
}

并像这样使用它;

let parse:ParseModul = ParseModul()
parse.getFromParse("UserProfile", whereKey: "username", equalTo: "Phil", completion: {
   (arr:NSArray) -> Void in
        self.returnArray = arr
        print(self.returnArray) // THIS IS THE DATA FROM PARSE
        // DO SOMETHING HERE

}) 

【讨论】:

  • 对于completen:(arr:NSArray) 我明白了。 Cannot create a single-element tuple with an element labelcompletion(temp) 我得到 Cannot invoke 'completion' with an argument list of type '([PFObject])'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多