2015-09-16 2 views
0

У меня есть цикл for-in и некоторый код вне этого. Я хочу, чтобы этот фрагмент кода выполнялся после завершения цикла. Как я могу это сделать? Это выглядит так:Блок для ввода-вывода

for item in array { 
... 
} 
action() 

EDIT: это целый код. На самом деле segue вызывается до создания всех объектов.

  // facebook friends 
      let fbRequest = FBSDKGraphRequest(graphPath:"me/friends", parameters: nil); 
      fbRequest.startWithCompletionHandler { (connection : FBSDKGraphRequestConnection!, result : AnyObject!, error : NSError!) -> Void in 
       if error == nil { 
        let data : NSArray = result.objectForKey("data") as! NSArray 
        for item in data { 
         print(item) 
         let queryIn1 = PFQuery(className:"Friendship") 
         queryIn1.whereKey("toUser", equalTo: PFUser.currentUser()!.username!) 
         queryIn1.whereKey("fromUser", equalTo: item["name"] as! String) 
         let queryOut = PFQuery(className:"Friendship") 
         queryOut.whereKey("fromUser", equalTo: PFUser.currentUser()!.username!) 
         queryOut.whereKey("toUser", equalTo: item["name"] as! String) 
         let query = PFQuery.orQueryWithSubqueries([queryIn1, queryOut]) 
         query.findObjectsInBackgroundWithBlock { 
          (objects: [AnyObject]?, error: NSError?) -> Void in 
          if error == nil { 
           if objects!.count == 0 { 
            let request = PFObject(className: "Friendship") 
            request["fromUser"] = PFUser.currentUser()!.username! 
            request["toUser"] = item["name"] as! String 
            request["status"] = "approved" 
            request.saveInBackgroundWithBlock{(success, error) -> Void in 
             print(item["name"] as! String) 
             globalClass.myFriends.append(item["name"] as! String) 
             globalClass.myFriends = globalClass.myFriends.sorted { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending } 
            } 
           } else { 
           } 
          } 
         } 
        } 
        self.defaults.setObject(true, forKey: "FB") 
        globalClass.facebook = true 
        self.performSegueWithIdentifier("firstFriends", sender: self) 
        UIApplication.sharedApplication().endIgnoringInteractionEvents() 
        self.spinningView.hidden = true 
       } else { 
       } 
      } 
+4

что происходит? не работает ли это как показано? Потому что это нужно. – Nishant

+0

Ну, я думаю, что весь цикл не выполняется до того, как будет вызвано действие. Если это невозможно, это может быть что-то еще. – Vincent

+2

Выполняете ли вы какой-то асинхронный код внутри цикла? – HAS

ответ

0

Fixed, добавив часть вроде этого:

        let request = PFObject(className: "Friendship") 
            request["fromUser"] = PFUser.currentUser()!.username! 
            request["toUser"] = item["name"] as! String 
            request["status"] = "approved" 
            request.saveInBackgroundWithBlock{(success, error) -> Void in 
             print(item["name"] as! String) 
             globalClass.myFriends.append(item["name"] as! String) 
             globalClass.myFriends = globalClass.myFriends.sorted { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending } 
             if globalClass.myFriends.count == data.count { 
              print(globalClass.myFriends.count) 
              print(data.count) 
              self.defaults.setObject(true, forKey: "FB") 
              globalClass.facebook = true 
              self.performSegueWithIdentifier("firstFriends", sender: self) 
              UIApplication.sharedApplication().endIgnoringInteractionEvents() 
              self.spinningView.hidden = true 
             } 
            } 
Смежные вопросы