2016-08-07 15 views
0

私はdidSelectItemAtIndexPathを使用してViewControllerBになるViewControllerAのコレクションビューを持っています。一度私がViewControllerBにいると、私はViewControllerBを新しい入力で再ロードするためにViewControllerAと同じ方法で使いたいと思う別のコレクションビューを持っています。私はこの質問が非常にシンプルだと思っていますが、私は新しく、それを理解しようとするのにずっと長い時間を費やしてきました。segueで呼び出されたのと同じViewController

ViewControllerA'sdidSelectItemAtIndexPath

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 
    let hero: Hero! 
    hero = heroes[indexPath.row] 
    performSegueWithIdentifier("HeroDetailVC", sender: hero) 
} 

ViewControllerA's私は問題が私のviewDidLoadViewControllerBの中で、オブジェクト「英雄」は、何らかの理由で値を持たないという事実にあると思いますセグエ

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "HeroDetailVC" { 
     if let detailsVC = segue.destinationViewController as? HeroDetailVC { 
      if let hero = sender as? Hero { 
       detailsVC.hero = hero 
       detailsVC.heroes = heroes 
      } 
     } 
    } 
} 

の準備。私はそれがラベルを読み込むための値を持つことを要求します。

viewDidLoad() { 
    super.viewDidLoad() 
    nameLbl.text = hero.name 
} 

私はセグエを使用する場合

if let hero = sender as? Hero { 
    detailsVC.hero = hero 
    detailsVC.heroes = heroes 
} 

ViewControllerAからViewControllerBに必要な情報を取得するようだが、ビューコントローラは、値のトラックを失ったか、突然ときはnilを持っている理由は、私が把握することはできません私は自分自身にセグエーティングを試みたり、自分自身をインスタンス化しようとします。

私はこのエラーを取得する:

"fatal error: unexpectedly found nil while unwrapping an Optional value".

イムは、オブジェクトのヒーローが渡されていない推測。なぜXcodeはクラッシュするのではなく、ヒーローのための最後の既知の値を使用しないのですか?

することは私も次

let viewController:UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("heroDetailVC") as UIViewController 
self.presentViewController(viewController, animated: false, completion: nil) 

でインスタンス化を試みた。しかし、あなたが見ることができるように私はそれで英雄と英雄の値を渡す方法がわかりません。

ViewControllerAからセグエを構築するとき、私は同様のエラーが発生しました - > Bしかし、私は右ViewControllerAをクリックしてViewControllerBにセグエにトリガマニュアルを設定することにより、それを修正することができました。 Xcodeをドラッグ&ドロップすると、ViewControllerBと接続できません。私は何をしますか?

+0

segueが 'viewcontroller'またはストーリーボードの' collectionViewCell'で接続されていることを確認しますか? –

+1

なぜあなたはあなたが持っているものを更新するのではなく、ViewControllerBの2番目のインスタンスをしたいのですか? –

+0

@PhillipMillsまあ正に、私はViewControllerBの2番目のインスタンスは必要ありませんが、私は画面上のすべての情報を更新する必要があります。コレクションのビューは4つあり、セルが押されたときに更新されるラベルがあります。 2番目のインスタンスを作成せずに情報を更新できる方法はありますか? – Apple

答えて

0

私は私の質問に対する答えを見つけました。

let doesntMatter = self.storyboard?.instantiateViewControllerWithIdentifier("heroDetailVC") as! HeroDetailVC 
    doesntMatter.hero = heroesInSynergy[indexPath.row] 
    doesntMatter.heroes = heroes 
    self.presentViewController(doesntMatter, animated: true, completion: nil) 

何らかの理由で、私がビューをインスタンス化しようとすると動作しませんでした。私が見つけたコードは古いか何かだったと思います。

私は次の質問が1つしかありません。これは、複数回インスタンス化するときに作成するすべてのビューでメモリの問題につながるでしょうか?

関連する問題