func audioControllerDidFinishLoadingAudioForKey(key: Int) {
print("current line position")
print(scriptTableView.currentLinePosition)
print("key")
print(key)
if scriptTableView.currentLinePosition == key && pausedPlayback == false {
playbackRecordingWithKey(key)
dispatch_async(dispatch_get_main_queue(), { () -> Void in
if self.recordLines == true {
self.setToolbarState(.RecordMode)
} else {
self.setToolbarState(.Playing)
}
})
}
}
我对这个if语句有一些非常奇怪的行为。
上述函数总是执行if块,即使该键与currentLinePosition的值不同(两者都是Ints)。打印输出显示例如:
current line position
25
key
27
playbackRecordingWithKey
但" playbackRecordingWithKey"仍然被调用(那里也有打印功能)
有人知道为什么会发生这种情况或如何调试吗?我在这里有点难过。
答案 0 :(得分:0)
感谢@HugoTunius建议将多线程作为问题,并感谢其他人的建议。
结果表明,调用' audioControllerDidFinishLoadingAudioForKey'到主线程修复了我的问题。我不认为currentLinePosition值在print函数和if语句之间发生了变化,原因有以下两点:
测试问题时,我确保行位置与键的值不相同。
调用函数之前所花费的时间会有所不同(由于数据大小不同),因此每次在该确切时间更改行位置似乎不太可能。
也许在创建线程时捕获了currentLinePosition(其中= = key)的值,我真的不知道。虽然有趣但尽管函数中的行位置值等于key,print()显示主线程值。如果我找到与此问题相关的多线程重要事项,我将在下面发表评论。