2016-05-01 7 views
0
let userQuery = PFUser.query() 
userQuery!.whereKey("username", equalTo: userUsername) 
userQuery!.findObjectsInBackgroundWithBlock({ (result:[PFObject]?, error:NSError?) in 
    currentProfilePageUser = result![0] as! PFUser 
}) 

Dies ist mein Code. Ich versuche, eine PFUser mit nur dem Benutzernamen zu bekommen. Aber ich habe Haltepunkte in findObjectsInBackgroundWithBlock hinzugefügt und festgestellt, dass es nicht aufgerufen wird. Daher kann ich meine Daten nicht erhalten. Warum wird findObjectsInBackgroundWithBlock nicht angerufen?PFQuery findObjectsInBackgroundWithBlock wird nicht aufgerufen?

let query = PFQuery(className: "Follow") 
    query.whereKey("followFrom", equalTo: PFUser.currentUser()!.objectId!) 
    query.whereKey("followingTo", equalTo: currentProfilePageUser) 
    query.findObjectsInBackgroundWithBlock { (result:[PFObject]?, error:NSError?) in 
     if result == nil{ 
      print("currentuser is not following this user") 
      self.followButtonTitle.setTitle("Follow", forState: .Normal) 
     }else{ 
      print("currentuser is follwing this user") 
      self.followButtonTitle.setTitle("Unfollow", forState: .Normal) 
     } 
    } 

Für einige wirklich seltsame Grund, die ersten findObjectsInBackgroundWithBlock Werke jetzt, aber das andere nicht genannt bekommt. Das ist sehr seltsam.

+0

Es wird wahrscheinlich aufgerufen, aber da es "inBackground" ist bedeutet dies, dass es auf einem Hintergrund-Thread aufgerufen wird. Versuchen Sie, auf Fehler zu testen, und fügen Sie für beide eine Druckanweisung hinzu. Sie sollten sehen, dass mindestens einer von ihnen dann aufgerufen wird. – Moonwalkr

Antwort

0

Versuchen Sie dies und sehen, ob Sie einen Druck in der Konsole erhalten:

let userQuery = PFUser.query() 
userQuery!.whereKey("username", equalTo: userUsername) 
userQuery!.findObjectsInBackgroundWithBlock({ (result:[PFObject]?, error:NSError?) in 
    if(error == nil){ 
     print("Success!") 
    } else { 
     print("Failed with error \(error)") 
    } 
}) 
+0

Ich weiß nicht warum, aber das läuft. Ich habe hier einen Haltepunkt gesetzt und es trifft den Haltepunkt. Ich verstehe wirklich nicht, warum dieses 'findObjectInBackgroundWithBlock' läuft, aber einige nicht ... –

+0

oh wow und jetzt command + z auf den alten Code und es läuft perfekt. Das ist so seltsam. –

+0

dieser findObjectsInBackgroundWithBlock funktioniert jetzt, aber meine andere funktioniert immer noch nicht. –

0

Die zweite Abfrage ich oben geschrieben erfordert die ersten Ergebnisse der Abfrage. Aus irgendeinem Grund wird die zweite Abfrage zuerst ausgeführt, dann die erste, unabhängig von der Reihenfolge meines Codes. Meine Lösung war, die 2. Abfrage innerhalb viewDidAppear setzen, setzen Sie es in viewWillAppear wird nicht einmal funktionieren.

+0

Dies ist nicht der Weg, um Ihr Problem zu lösen. Sie haben mit grundlegenden Nebenläufigkeitsproblemen zu tun. Wenn Sie zwei Abfragen haben, bei denen die zweite Daten von der ersten benötigt, haben Sie zwei Möglichkeiten: synchrone Abfragen ausführen (schlecht) oder sicherstellen, dass die zweite Abfrage nicht ausgelöst wird, bevor die erste abgeschlossen wurde. Sie können dies leicht mit dem Bolts Framework erreichen. Überprüfen Sie diese Antwort für weitere Informationen: http://stackoverflow.com/questions/35161271/in-swift-how-do-you-execute-one-query-to-parse-before-another-on-pfquerytablevi/35162052#35162052 – Moonwalkr