使用 Swift + Alamofire + Swifty-Json 将动态数据传递给 UIScrollView

Posted

技术标签:

【中文标题】使用 Swift + Alamofire + Swifty-Json 将动态数据传递给 UIScrollView【英文标题】:Pass Dynamic Data to UIScrollView using Swift + Alamofire + Swifty-Json 【发布时间】:2016-02-06 21:33:53 【问题描述】:

我有一个 ViewController,它有一个 UIScrollView。 UIScrollView 加载了三个 ViewControllers vc0vc1vc2

问题

在 ViewController 上,我使用 Alamofire 和 SwiftyJson 加载数据:

Alamofire.request(.GET, url, parameters: ["foo": "bar"])
        .responseJSON  response in
            switch response.result 
            case .Success:
                if let value = response.result.value 
                    let json = JSON(value)
                    
                    dispatch_async(dispatch_get_main_queue()) 
                     self.views = json["Views"].stringValue
                     print(self.views)
                    
                    
            
            case .Failure(let error):
            print(error)
            
            
    

打印结果:3603 正确。

我试过了:

dispatch_async(dispatch_get_main_queue()) 
    self.views = json["Views"].stringValue
    vc0.views = views

我还尝试在 alamofire 调用中添加 vc0.views = views 并放入使视图显示在 UIScrollView 中的代码:

    let vc0 = vc0(nibName: "vc0", bundle: nil)
    
    vc0.views = self.views
    
    self.addChildViewController(vc0)
    self.displayReportView.addSubview(vc0.view)
    vc0.didMoveToParentViewController(self)
    
    let vc1 = vc1(nibName: "vc1", bundle:nil)
    
    var frame1 = vc1.view.frame
    frame1.origin.x = self.view.frame.size.width
    vc1.view.frame = frame1
    
    self.addChildViewController(vc1)
    self.displayReportView.addSubview(vc1.view)
    vc1.didMoveToParentViewController(self)
    
    let vc2 = vc2(nibName: "vc2", bundle:nil)
    
    var frame2 = vc2.view.frame
    frame2.origin.x = self.view.frame.size.width * 2
    vc2.view.frame = frame2
    
    self.addChildViewController(vc2)
    self.displayReportView.addSubview(vc2.view)
    vc2.didMoveToParentViewController(self)
    
    self.displayReportView.contentSize = CGSizeMake(self.view.frame.size.width * 3, self.view.frame.size.height - 66);

控制台没有错误,只是什么都不显示

附言

一切正常,获取数据并显示滚动视图并沿着它们滑动,唯一不能将数据从 ViewController 传递到任一 vc0 vc1vc2 视图在 UIScrollView 中加载。

问题

如何将 ViewController 上加载的数据传递给 UIScrollView 中动态加载的视图(vc0vc1vc2)。

项目文件

我一直在关注显示视图等的教程。这里是教程文件:https://www.veasoftware.com/s/Swipe-Navigation-Xcode-7.zip

【问题讨论】:

@DanBeaulieu 我不确定。我很菜鸟。顺便说一句 - 我以前去过你的网站。不错的教程。 @DanBeaulieu 你删除了你的 cmets 吗?我只是想让你知道有一个解决方案。 @DanBeaulieu(并不是说我在那里听起来像个跟踪狂)——我只是觉得出了点问题,或者我想象着和你说话……已经好几个小时了,需要休息一下。 【参考方案1】:

在目标 ViewController 上,vc1 vc2 或 vc3 你如何显示数据?

如果你有:

override func viewDidLoad() 
   super.viewDidLoad()

   print(views)

尝试更改为 ViewDidAppear 方法

override func viewDidAppear(animated: Bool) 
    print(views)

另外,在您的 Alamofire 呼叫中,执行以下操作:

dispatch_async(dispatch_get_main_queue()) 
     self.views = json["Views"].stringValue
     self.vc0.views = self.views

我也怀疑(顺便说一句你写了你的问题)你的 vc0、vc1、vc2 是在 alamofire 之后声明的,所以请移动

let vc0 = vc0(nibName: "vc0", bundle: nil)

到顶部,就在你的类声明下面。

【讨论】:

太棒了。谢谢。

以上是关于使用 Swift + Alamofire + Swifty-Json 将动态数据传递给 UIScrollView的主要内容,如果未能解决你的问题,请参考以下文章

使用 Swift 3 和 Alamofire 4 后没有得到响应

在 Swift 中将 Alamofire 结果解析为对象(使用:Alamofire、SwiftyJSON 和 ObjectMapper)

使用 Alamofire 搜索从 swift 2 转换为 swift 3 时出错

Swift - 使用 alamofire 发布请求

Swift3 JSON 使用 Alamofire

需要帮助使用 Alamofire 使用 Swift 解析 JSON