我发现在我的应用中更新用户界面时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一样工作?
答案 0 :(得分:1)
要重新启用“赞”按钮需要更长的时间
这几乎可以肯定是因为在执行涉及接口的操作时,您忽略了跳出主线程。因此,你的整个问题可能是一个线程问题。