2016-08-19 12 views
2

DetailViewControllerから別のView ControllerにCore Dataオブジェクトを渡して編集できる方法はありますか? MasterViewControllerからDetailViewControllerから別のView ControllerにCore Dataオブジェクトを渡す

DetailViewControllerに移動します。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "showDetail" { 
      if let indexPath = self.tableView.indexPathForSelectedRow { 
       let myValue = myValues[indexPath.row] 
       let controller = (segue.destinationViewController as! UINavigationController).topViewController as! DetailViewController 
       controller.detailItem = myValue 
       controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem() 
       controller.navigationItem.leftItemsSupplementBackButton = true 
      } 
     } 
    } 

その後DetailViewControllerからEditViewControllerへ:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "showEdit" { 

      let controller = editViewController 
      controller.editItem = detailItem 
      controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem() 
      controller.navigationItem.leftItemsSupplementBackButton = true 


     } 

    } 

しかし、私は私のオブジェクト

EDIT

EDIにnilを取得トン項目はEditViewControllerに、このように設定されている:

var editItem: MyValues? { 
     didSet { 
      // Update the view. 

      self.configureView() 
     } 
    } 

とdetailItemはDetailViewControllerにこのように設定されている:

var detailItem: MyValues? { 
     didSet { 
      // Update the view. 
      self.configureView() 
     } 
    } 

答えて

2

代わりの編集コントローラのプロパティを使用して、あなたはセグエから得るものを使用します。

I.e. (あなたのEditViewControllerに直接移動していると仮定):あなたはおそらくではなく、それをテストする必要があります以外... ...何かのようで... ...

let controller = segue.destinationViewController as! EditViewController 

let controller = editViewController 

を交換してくださいas!を使用してください。これが可能になりましたかについての私の推測で更新

===

editViewControllerがどこかのコードを指している必要があります。つまり、セグメントメカニズムの一部として作成されたインスタンス/オブジェクトと同じではありません。つまり、2つの異なるオブジェクトがあり、画面にビューを表示するデータにデータを渡していないということです。

+0

ありがとうございます。それはトリックを行うようだ。しかし、なぜ私のコードは動作しませんでしたか? –

+0

あなたは 'editViewController'が指し示す何らかの場所でコードを作成していなければなりません。つまり、あなたのために作成されたインスタンス/オブジェクトではありません。言い換えれば、2つの異なるEditViewControllerオブジェクトがあり、画面にビューを配置しようとしていたものにデータを渡していないということです。 –

+0

あなたの答えはありがたいですが、主に説明のためにありがとう!相談する相手の回答にこれを追加するようにリクエストできますか?また、私はそれを(editViewController)私のクラス内のvarとして作成した右です... –

関連する問題