2015-06-24 2 views
-1

Я разрабатываю приложение, используя ios, swift и parse.com в качестве backend. Моя проблема в том, что мне нужен один объект объекта запроса во втором объекте запроса, например, ниже кода. но когда я использую ниже код GUI, перестает отвечать на запросы в течение некоторого времени из-за метода findObjects(). Вместо этого я использовал findObjectsInBackgroundWithBlock(), но вместо того, чтобы показывать self.posts tableview только одну запись в tableview. У меня 10 записей в таблице. Можете ли вы указать мне правильный способ решения проблемы ниже. Фактически я не хочу использовать метод findObjects().findObjectInBackgroundWithBlock inested ios

var query = PFQuery(className:"Post") 
var fquery = PFQuery(className: "Friends") 
query.findObjectsInBackgroundWithBlock { (objects: [AnyObject]!, error: NSError!) -> Void in 
    if error == nil { 
     let user = PFUser.currentUser() 
      if let objects = objects as? [PFObject] { 
       for object in objects { 
        friendArray.removeAll(keepCapacity: false) 
        fquery.whereKey("whosefriend", equalTo: object["postusername"]) 
        var fobjects = fquery.findObjects() 
        for fobject in fobjects { 
         friendArray.append(fobject["friendname"] as String) 
        } 
        if (contains(friendArray, user["fullname"] as String)) { 
         let post = Post(.......) 
         self.posts.append(post) 
        } 
       } 
      } 
      self.tableView.reloadData() 
     } else { 
      println("Error: \(error) \(error.userInfo!)") 
     } 
    } 
+0

Что вы уже пытались решить? Если вы не хотите использовать findObjects(), то почему вы? – RyanR

+0

Вы определенно предпочли бы не использовать findObjects, потому что это синхронно и блокирует основной поток. –

+0

Спасибо за ответ, я попытался использовать findObjectsInBackgroundWithBlock вместо findObjects, но проблема в том, что это асинхронная функция, поэтому данные не получают должным образом, поэтому я использовал findObjects, чтобы получить данные и выполнить процесс. –

ответ

0

меня решить эту проблему с помощью реляционных запросов.

var query = PFQuery(classWithName: "Post") 
var fQuery = PFQuery(className:"Friends") 
fQuery.whereKey("friendname", equalTo: cuser["fullname"]) 
query.whereKey("postusername", matchesKey:"whosefriend", inQuery:fQuery) 
0

Один из вариантов, чтобы сделать свой «postusername» столбец указателя в классе Post, который указывает на класс друзей, а затем вам нужно будет только один запрос, который будет идти что-то вроде:

var query = PFQuery(className:"Post") 
query.includeKey("postusername") //this would include the object that it points to i.e. the Friends object you saved there 

.. . затем в вашем for петле ...

for object in objects! { 
    let friend = object["postusername"] // now friend is the Friends object 
    let friendName:String = friend["friendname"] as? String 
    friendArray.append(friendName) 
} 

Примечание: это требует, чтобы вы экономии «postusername» как PFObject классных друзей. Parse iOS docs объясняют это хорошо.

https://parse.com/docs/ios/guide

+0

Привет, Спасибо за ответ. Я добавил строку ниже, когда добавляю новый post object ["postusername"] = PFObject (без DataWithClassName: «Друзья», objectId: PFUser.currentUser(). ObjectId), но когда я использовал ваш код для цикла, у меня был объект friend, но friendName ноль. –

+0

Hey @abcdgef - В консоли Parse вам нужно поменять столбец postusername на столбец указателя, указывающий на класс друзей. Это также требует сохранения объекта класса Friends в столбце postusername, т. Е. Не только String. Ознакомьтесь с документами Parse ios для этого. Кроме того, что вы пытаетесь сделать с 'let post = Post (.......) self.posts.append (post)' – user3498976

+0

Привет, я создал столбец указателя как этот, object ["postusername"] = PFObject (withoutDataWithClassName: «Друзья», objectId: PFUser.currentUser(). ObjectId), нормально? Я не получаю имя друга, если использую ваш код. Фактически, когда любой друг принимает приглашение, запись была сохранена в таблице «Друзья», а стол для сообщений - когда пользователь добавляет сообщение в таблицу –