为啥我的值没有传递到 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 的值?