2015-08-22 2 views
-2

Я написал класс с методами, такими как выборка, обновление, добавление и удаление с Parse.com.Класс parse для извлечения данных из 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") 

метод всегда возвращает "ничего".

+0

Подробнее об асинхронном –

ответ

2

Вы возвращаете свой массив до того, как данные будут извлечены. Данные, полученные в блоке, не могут быть возвращены в функции.

Вы можете получить свои данные в своем блоге;

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 

}) 
+0

Для 'completeten: (arr: NSArray)' i get. 'Невозможно создать одноэлементный кортеж с меткой элемента 'и для' завершения (temp) 'i get' Невозможно вызвать' завершение 'с помощью списка аргументов типа' ([PFObject]) '' – PhilHarmonie

Смежные вопросы