iOS:表视图中的方法和数据被过早调用

时间:2016-04-03 06:08:26

标签: ios iphone swift uiimageview

我试图在屏幕上浏览一组图像,每个图像之间都有延迟。

func showImageAtIndex(index: Int) {

    // all UI updates happen on the main queue
    dispatch_async(dispatch_get_main_queue()) {
        if (index) >  self.images.count-1 { self.otherView.removeFromSuperview()
            self.imageView?.removeFromSuperview()
            return
        }


        self.imageView?.image = self.images[index]


        let delayTime = 0.13
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(delayTime * Double(NSEC_PER_SEC))), dispatch_get_main_queue()) { () -> Void in

            self.showImageAtIndex(index + 1)
        }
    }

在我的表视图中,单击一个按钮时,调用showImageAtIndex方法

func onAdd(sender: AnyObject) {
self.temp=self.lotteryMachine.setPossibleCombinations(currentStandings)
    //i took out the image view stuff bc its not necessary
    self.navigationItem.rightBarButtonItem!.enabled = false
    self.navigationItem.leftBarButtonItem!.enabled = false
    self.showImageAtIndex(0)
    tableView.reloadData()
   self.navigationItem.rightBarButtonItem!.enabled = true
    self.navigationItem.leftBarButtonItem!.enabled = true
}

我想知道的是为什么首先重新加载表中的数据,然后加载图像而不是反过来。我想要发生的是加载图像,然后在延迟后更新数据。

1 个答案:

答案 0 :(得分:1)

您的showImageAtIndex函数使用dispatch_async,这意味着闭包内的所有内容都是异步发生的。

showImageAtIndex(0)的调用立即返回,并且tableView.reloadData()的调用发生在执行dispatch_after闭包内的延迟代码之前。

尝试在tableView.reloadData()关闭内调用showImageAtIndex(index + 1)后移动dispatch_after