为啥我的值没有传递到 secondViewController [关闭]

Posted

技术标签:

【中文标题】为啥我的值没有传递到 secondViewController [关闭]【英文标题】:Why my value is not passing into secondViewController [closed]为什么我的值没有传递到 secondViewController [关闭] 【发布时间】:2017-05-07 14:29:09 【问题描述】:

我想将简单的字符串从 oneVC 传递到 secondVC。我是 ios 新手。

    我声明了 String nameOfFilm。 当我单击 CollectionViewItem 时,我正在下载 JSON,获取它的一个值(字符串)并将其分配给 nameOfFilm。然后我开始转入第二个VC。 在带有正确标识符的 PrepareForSegue 方法中,我将 secondVC 值与 nameOfFlim.(nextScene.name = nameOfFilm) 进行比较

结果中,当第二个VC进来时,nextScene.name为空。在此处输入图片描述 我正确解析了 JSON。我认为可能是时间不匹配,某些功能太快了。是什么导致了问题?

var nameOfFilm = String()

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
    INDEX_NUMBER_BEFORE = indexPath.row
    let filmID = arrayWithID[INDEX_NUMBER_BEFORE]
    downloadFilm(url: "https://api.themoviedb.org/3/movie/\(filmID)\(key)&append_to_response=videos,images")
    performSegue(withIdentifier: "toTheDetail", sender: self)


override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    if segue.identifier == "toTheDetail" 
        let nextScene = segue.destination as! FilmDetailViewController
        nextScene.name = nameOfFilm
    

【问题讨论】:

不显示代码图片。在您的问题中显示代码。 @matt 感谢您指出这一点。已编辑。 能不能把downloadFilm方法的代码贴出来,需要检查数据操作。 【参考方案1】:

这里的问题是,downloadFilm 将是一个在后台发生的异步任务,需要一些时间来发出请求并以您需要的值进行响应。

您的 downloadFilm 函数应该接受回调,以便您可以等待响应值,然后根据该响应执行操作,典型的使用方式如下:

downloadFilm(url: "https://api.themoviedb.org/3/movie/\(filmID)\(key)&append_to_response=videos,images")  filmName in 
    self.nameOfFilm = filmName
    self.performSegue(withIdentifier: "toTheDetail", sender: self)

为此,您需要更新您的 downloadFilm 函数,使其类似于此...

func downloadFilm(url: String, completion: @escaping (_ filmName: String) -> Void) 
   // do work here to setup network request
   let task = URLSession.shared.dataTask(with: request)  data, response, error in
      // parse response and get name
      completion(name)
   

Here 是关于 Swift 完成处理程序的指南,有助于理解这一概念。

【讨论】:

以上是关于为啥我的值没有传递到 secondViewController [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 QString 没有得到 TextField 的值?

为啥没有查询参数被传递到我的 NancyFX 模块?

为啥传递给函数的指针的值没有改变? [复制]

为啥 getServerSideProps 没有将正确的值传递给组件 props?

关于为啥我的数据没有被传递到新的表格视图的任何想法?

为啥我的用户数据没有使用资源控制器中的 show 方法传递到页面视图?