2015-09-13 5 views
0

Я пытаюсь создать приложение для социальных сетей, и одна из функций - это кнопка, к сожалению, когда вы щелкаете все работает нормально, но все время она не обновляет количество правильно подходит и тому подобное. Я считаю, что это связано с освещением, но мне нужно, чтобы он обновлялся, чтобы он мог обновлять количество понравившихся. Кто-нибудь знает, что происходит ...Как кнопка не работает каждый раз

func like(sender: AnyObject) { 

    var buttonPosition: CGPoint = sender.convertPoint(CGPointZero, toView: self.table) 

    var indexPath: NSIndexPath = self.table.indexPathForRowAtPoint(buttonPosition)! 

    if sender.currentTitle == "Like" { 
     sender.setTitle("Unlike", forState: .Normal) 
     var addLikeQuery = PFQuery(className: "Post") 

     addLikeQuery.whereKey("message", equalTo: self.messages[indexPath.row]) 

     addLikeQuery.findObjectsInBackgroundWithBlock { (aPosts, error) -> Void in 
      if let aPosts = aPosts { 
       for aPost in aPosts { 
        aPost.addUniqueObject(PFUser.currentUser()!.objectId!, forKey: "likers") 
        self.likeDisplayText = ((aPost["likers"] as! [String]).count - 1).description + " Like" 
        self.table.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .None) 
        aPost.saveInBackgroundWithBlock({ (success, error) -> Void in 
         if error != nil { 
          self.likeDisplayText = "Couldn't Like Picture!" 
         } 
        }) 
       } 
      } 
     } 

    } else { 
     sender.setTitle("Like", forState: .Normal) 
     var removeLikeQuery = PFQuery(className: "Post") 

     removeLikeQuery.whereKey("message", equalTo: self.messages[indexPath.row]) 

     removeLikeQuery.findObjectsInBackgroundWithBlock { (rPosts, error) -> Void in 
      if let rPosts = rPosts { 
       for rPost in rPosts { 
        rPost.removeObject(PFUser.currentUser()!.objectId!, forKey: "likers") 
        self.likeDisplayText = ((rPost["likers"] as! [String]).count - 1).description + " Like" 
        self.table.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .None) 
        rPost.saveInBackgroundWithBlock({ (success, error) -> Void in 
         if error != nil { 
          self.likeDisplayText = "Couldn't Like Picture!" 

         } 
        }) 

       } 
      } 
     } 
    } 
} 

ответ

0

Я не совсем уверен, что ваш вопрос, но я могу иметь некоторое представление. Если вы пытаетесь отредактировать некоторые элементы в пользовательском интерфейсе через функцию, которая много обрабатывает или находится в другом потоке, я предлагаю сделать это. Asynchronus и где-нибудь в этой функции, где вы редактируете интерфейс, заставляют этот код работать в основном потоке. Вот что я имею в виду.

func like(sender: AnyObject) { 
    dispatch_async(dispatch_get_global_queue(Int(QOS_CLASS_USER_INITIATED.value), 0)) { 
    // do background stuff 

    dispatch_async(dispatch_get_main_queue()) { 
     // when you want to edit the text of the button 
     // or change something in your UI 
     // do it in here 
     self.likeDisplayText = "Couldn't Like Picture!" 
    } 
    } 
} 
+0

Я пробовал, чтобы это не сработало. Я не уверен, что происходит, но моя кнопка вроде просто не работает. –

+0

Используйте отладчик Xcode и выполняйте функцию по строчке, чтобы узнать, что не так. –

+0

Я не думаю, что я просто думаю, что я делаю что-то неправильно. Знаете ли вы какие-либо учебники о том, как сделать такую ​​кнопку? –

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