2016-03-03 44 views
1

我正在使用XCode 7.0并正在参加iTunesU课程,斯坦福CS193p。该程序“Smashtag”旨在显示与搜索相关的推文。我试图添加我自己的功能来点击推文,并将其显示在不同的视图控制器中。该tableviewcell类有一个变量:意外地发现零,同时展开可选AFTER有条件展开

var tweet: 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{ 
        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 
} 

用户名,userScreenName, profileImage和tweetMedia都加载到视图控制器上;然而,tweetBody会在标题中给出错误并使程序崩溃。我尝试了tweetBody的可选链接;不过,tweetBody不会显示。任何帮助表示赞赏。

+0

真正的问题似乎是'selectedTweet.tweet'为什么是零。这个价值应该如何填补? –

+0

你确定'tweetBody'本身是否正确实例化? –

+0

什么是tweetBody?你在哪里访问它? – Eendje

回答

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 
        } 
       } 
      } 
     } 

在你的其他视图控制器声明一个字符串变量 -

var tweetToDisplayText:String? 

终于在viewDidLoad:方法添加 -

tweetToDisplay.text = tweetToDisplayText 
-1

它太简单了我的朋友只需更换这两条线

(segue: UIStoryboardSegue, sender: AnyObject?) to (segue: UIStoryboardSegue, sender: AnyObject!) 

let selectedTweet = sender as? TweetTableViewCell to let selectedTweet = sender as TweetTableViewCell 

这将工作fine.Happy coding.Provide您的反馈意见。

相关问题