我正在使用XCode 7.0并参加了iTunesU课程,Stanford CS193p。该计划," Smashtag,"用于显示与搜索相关的推文。我试图自己添加一个功能来点击一条推文,它会在不同的视图控制器中显示它。 tableviewcell类有一个变量:
var tweet: Tweet?
tweet类有一个用户,其中包含屏幕名称和名称,以及他们的个人资料图片的网址,这是一个可选的。在我的表视图控制器中,我在单击一个单元格后创建了一个segue:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let vc = segue.destinationViewController as? ViewController{
if let identifier = segue.identifier{
if identifier == "showTweet"{
if let selectedTweet = sender as? TweetTableViewCell{
vc.tweetToDisplay = selectedTweet.tweet!
}
}
}
}
然后在我的其他视图控制器中,我有一个不同的主题:
self.profileImage.image = UIImage(data: imageData)
self.tweetMedia.image = UIImage(data: mediaData)
self.userName.text = "\(tweetToDisplay.user.name)"
self.userScreenName.text = "\(tweetToDisplay.user.screenName)"
if let body = tweetToDisplay.text{
self.tweetBody.text = body
}
userName,userScreenName,profileImage和tweetMedia都加载到视图控制器上;但是,tweetBody在标题中给出错误并使程序崩溃。我尝试过使用tweetBody进行可选链接;然而,tweetBody没有显示。任何帮助表示赞赏。
答案 0 :(得分:0)
我已经在这个问题上挣扎了几个小时。对我有用的是将视图控制器之间的数据交换存储在单独的变量中。以下是适合我的解决方案..希望有所帮助。
而不是 -
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let vc = segue.destinationViewController as? ViewController{
if let identifier = segue.identifier{
if identifier == "showTweet"{
if let selectedTweet = sender as? TweetTableViewCell{
vc.tweetToDisplay = selectedTweet.tweet!
}
}
}
}
尝试 -
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let vc = segue.destinationViewController as? ViewController{
if let identifier = segue.identifier{
if identifier == "showTweet"{
if let selectedTweet = sender as? TweetTableViewCell{
guard let tweetText = selectedTweet.tweet! else {
return
}
vc.tweetToDisplayText = tweetText
}
}
}
}
在您的其他View Controller中声明一个字符串变量 -
var tweetToDisplayText:String?
最后在viewDidLoad:
方法中添加 -
tweetToDisplay.text = tweetToDisplayText
答案 1 :(得分:-1)
太简单了,我的朋友只需更换这两行
(segue: UIStoryboardSegue, sender: AnyObject?) to (segue: UIStoryboardSegue, sender: AnyObject!)
和
let selectedTweet = sender as? TweetTableViewCell to let selectedTweet = sender as TweetTableViewCell
这样可以正常工作。快乐编码。提供您的反馈。