2017-07-20 5 views
0

にコアデータオブジェクトを渡す、私はサブクラス化TabBarController私はchildViewsでそれを解析するtableViewControllerのリストからTabBarControllerにコアデータオブジェクトを渡すためにしようとしているtableViewControllerからTabBarController

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    if let objs = controller.fetchedObjects , objs.count > 0 { 
     let casE = objs[indexPath.row] 
     performSegue(withIdentifier: "showDetail", sender: casE) 
    } 
} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "showDetail" { 
     if let destination = segue.destination as? CaseDetail { 
      if let casE = sender as? Case { 
       destination.casE = casE 
      } 
     } 
    } 
} 

にセグエを行うので、渡しますそれはtabBarController

class CaseDetail: UITabBarController { 

    var casE: Case? 
} 

そして、子ビューでそれを取得しようとする

override func viewDidLoad() { 
    super.viewDidLoad() 

    let tbvc = self.tabBarController as! CaseDetail 
    casE = tbvc.casE 
    print(casE as Any) 
} 
をのviewDidLoad

しかし、私は何も得ていません。データを渡す他の方法を知っている人はいますか?

アドバイスありがとうございました!

+0

'destination.casE = casE'の直前に出力先の値を、' casE = tbvc.casE'の直前にtbvcの値を出力します。アドレスは同じですか?もしそうなら、どちらが最初に印刷されますか? –

+0

のアドレスは同じではなく、最初に「宛先」に続いて「tbvc」になりますが、それはどういう意味ですか? 先 tbvc と、このような警告警告だ:ビューウィンドウではありません。<0x7fabafd0bb60 Tabula.CasesListVC>の<0x7fabafc33030 Tabula.CaseDetail>提示する試みを階層! – Just66

+0

準備中(segue:UIStoryboardSegue、送信者:Any?)にprintステートメントを追加します。 print( "a")とviewDidLoad()に別のprint文を追加します。 print( "b")。シーケンスがa - > bまたはb - > aであるかどうかを確認する –

答えて

0

よしは、アップルのドキュメントを読んだ後、私はあなたのアプリケーションにNSManagedObjectの参照を渡しているときはいつでも、弱参照として宣言することは有益である素敵なノートに

を見つけました。これは、NSManagedObjectが削除され、存在しないオブジェクトへの参照が残っている場合に、View Controllerを保護するのに役立ちます。プロパティがweakとして宣言されると、オブジェクトが削除されると自動的にnilに設定されます。

だからポイントを作っている、と私はTabBarControllerサブクラス変更:

class CaseDetail: UITabBarController { 

     weak var casE: Case? 
} 

をそして今、それは完璧に動作します!

関連する問題