iOS Swift:NSBlockOperation在iPhone模拟器6s和5s

时间:2016-01-07 01:53:00

标签: ios iphone swift nsblockoperation

我发现在我的应用中更新用户界面时NSBlockOperation的不同行为让我觉得很奇怪。

对于每个UIButtons(例如Thumb-up,Thumb-down,Like等),我将它们链接到它们的动作方法,类似于下面使用NSBlockOperation的动作方法。 / p>

按钮为例:

@IBAction func likePost(sender: AnyObject) {
        favoriteBtn.enabled = false
        let operation = NSBlockOperation { () -> Void in

            NetworkUtils.sharedInstance.likePost(self.curPost) { (completed, error) -> Void in
                self.favoriteBtn.enabled = true
                self.updateUserLabels(completed) // does not get triggered
            }
        }

        operationQueue.addOperation(operation)
    }

NetworkUtils Parse 进行API调用,返回completed(Bool)和error(String?)的闭包。在此NSBlockOperation中,我使用self.updateUserLabels()方法更新mainQueue上的用户界面:

func updateUserLabels(completed: Bool) {

        if completed {
            NSOperationQueue.mainQueue().addOperationWithBlock { () -> Void in
                self.likeCount.text = self.curPost.likes; 
            }
        }
    }

代码在 iPhone模拟器5s 中运行良好,但是,在模拟器6s或6s Plus上,看到Like按钮需要更长时间启用,即使在updateUserLabels()调用返回闭包之前,也会调用NetworkUtils.sharedInstance.likeQuestion()方法。

我想知道为什么在不同的iPhone模拟器上存在这样的差异,以及如何使它们像5s一样工作?

1 个答案:

答案 0 :(得分:1)

  

要重新启用“赞”按钮需要更长的时间

这几乎可以肯定是因为在执行涉及接口的操作时,您忽略了跳出主线程。因此,你的整个问题可能是一个线程问题。