ios - 完成处理程序在 viewDidLoad 中不起作用?

标签 ios swift viewdidload completionhandler

我正在使用这个 library在我的横幅应用程序中。我试图通过解析 JSON 来获取链接。

图像未显示在 slideshow View 中。如果我按下 slideshow View ,之后一切正常。我认为我的完成处理程序存在一些问题。 但我还不能解决它:)

@IBOutlet weak var slideshow: ImageSlideshow!
var transitionDelegate: ZoomAnimatedTransitioningDelegate?
var Banner : [AlamofireSource] = []

override func viewDidLoad() {
        super.viewDidLoad()
        Banners { (imagesource) in
            if imagesource != nil {
                self.bannershow()
            }
        }
  }

    func Banners(completionHandler: ([AlamofireSource]?) -> ()) -> (){
        Alamofire.request(.GET, "http://46.420.116.11/mobileapp/gps/api.php?rquest=get_banners")
            .responseJSON{ response in
                if let data = response.result.value{
                    let json = JSON(data)
                    let count = json["image_path"].count
                    for index in 0...count-1 {
                        let image :String = json["image_path"][index].stringValue
                        let source : AlamofireSource = AlamofireSource(urlString: image)!
                        self.Banner.append(source)
                    }
                    completionHandler(self.Banner)
                }
        }
  }

    func bannershow(){
        self.slideshow.backgroundColor = UIColor.whiteColor()
        self.slideshow.slideshowInterval = 2.0
        self.slideshow.contentScaleMode = UIViewContentMode.ScaleToFill
        self.slideshow.setImageInputs(self.Banner)

        let recognizer = UITapGestureRecognizer(target: self, action: "click")
        self.slideshow.addGestureRecognizer(recognizer)
        }

 func click() {
        let ctr = FullScreenSlideshowViewController()
        ctr.pageSelected = {(page: Int) in
            self.slideshow.setScrollViewPage(page, animated: false)
        }

        ctr.initialPage = slideshow.scrollViewPage
        ctr.inputs = slideshow.images
        self.transitionDelegate = ZoomAnimatedTransitioningDelegate(slideshowView: slideshow);
        ctr.transitioningDelegate = self.transitionDelegate!
        self.presentViewController(ctr, animated: true, completion: nil)
    }

最佳答案

您可能遇到线程问题。不能保证在主线程上调用横幅完成处理程序。在执行任何触及您的属性或(尤其是)界面的操作之前,您需要显式地跳出到主线程。

关于ios - 完成处理程序在 viewDidLoad 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35383551/

相关文章:

ios - 如何在不指定 UUID 的情况下扫描 iBeacon 信号?

ios - 禁用背景颜色更改,但在 UITableViewCell 突出显示时启用文本颜色更改

ios - 尝试将 iOS 设备添加到门户时请求超时

swift - 获取放置的 SCNNode 的世界 x、y 和 z - Swift

ios - 来回导航时清理旧的 UITableViewCells

ios - 克服 iPhone 5 系列和 iPhone 4 系列之间的 CPU 功率差异。 iPhone优化

ios - 从数组中选择一个随机按钮

ios - Swift/Spring - 对成员 'subscript' 的引用不明确

ios - ViewController 出现两次过渡

ios - 无法从外部viewDidLoad访问Eureka表单对象