2015-08-25 3 views
0

Я пытаюсь извлечь данные пользователя, чтобы получить информацию о пользователе из класса _User, используя идентификатор объекта. я использовал это:Извлечение данных пользователя из класса Parse «_User» с использованием «ObjectId»

var data:NSMutableArray = NSMutableArray() 
func loadData() { 
    data.removeAllObjects() 

    var profileQuery:PFQuery = PFUser.query()! 
     profileQuery.getObjectInBackgroundWithId(userId, block: { (objects, error) -> Void in 
      if error == nil { 
       self.data.addObject(objects!) 
      } 
     }) 
    println(userId) // this is the userId as String. 
    println(self.data) ********* // empty array. 
} 

я получаю пустой массив data здесь .. Я попытался это тоже, но то же самое, что здесь происходит тоже. :

var profileQuery:PFQuery = PFUser.query()! 
     profileQuery.whereKey("objectId", equalTo: userId) 
     profileQuery.findObjectsInBackgroundWithBlock { (objects, error) -> Void in 
      if let objects = objects { 
       for object in objects { 
        self.data.addObject(object) 
       } 
      } 
     } 
+2

@Larcerax это не является существенным для вопроса, так как это параметр, предоставленный запросу. – dangnabit

+0

@pxlshpr, вы не OP, так как вы знаете? – Loxx

+2

@ Larcerax, потому что я раньше использовал Parse. Вам понадобится доступ к OP Parse app для перекрестной ссылки, если он существует (именно это я и предполагаю, что вы собираетесь). – dangnabit

ответ

1

Помните, что «findObjectsInBackgroundWithBlock» происходит в async! Вам нужно поместить любую логику, относящуюся к данным внутри блока.

var profileQuery:PFQuery = PFUser.query()! 
profileQuery.getObjectInBackgroundWithId(userId, block: { (objects, error) -> Void in 
    if error == nil { 
     self.data.addObject(objects!) 
     println(self.data) //shouldn't be empty. 
    } 
}) 
+1

Я думаю, что 'userId' предварительно заполнен OP и используется для создания реального запроса, поэтому он не обязательно должен быть внутри блока. Просто 'self.data'. – dangnabit

+1

Да, я там оговорился. Исправлена. – AlexKoren

+0

Очень приятно. Akshay Kheveria. Также стоит отметить причину, по которой self.data возвращает nil, потому что фактический метод выполняет ___ и завершает___ до того, как элемент будет извлечен, потому что он извлекается отдельно в другом потоке (в фоновом режиме) внутри блока. Это обычная проблема с новыми разработчиками Parse. Распространить слово. +1 @AlexKoren для ссылки async – soulshined

0

Отложив почему вы используете NSMutableArray для сингулярного PFUser объекта-ты в основном ожидали увидеть self.data заполняемый в неправильном месте. Пользователь будет добавлен к нему (при успешном извлечении), внутри закрытие. Так что сделайте что-нибудь вроде:

var data:NSMutableArray = NSMutableArray() 
func loadData() { 
    data.removeAllObjects() 

    var profileQuery:PFQuery = PFUser.query()! 
    profileQuery.getObjectInBackgroundWithId(userId, block: { (objects, error) -> Void in 
     if error == nil { 
      self.data.addObject(objects!) 
      println(self.data) //...shouldn't be empty here 
     } else { 
      println("Error retrieving user: \(error.description") 
     } 
    }) 
} 
Смежные вопросы