0

私は昨年末にObjectiveCとプログラミングを学び始め、Core Dataを扱っているので、助けが必要です。

VC3でオブジェクトを選択し、[選択]ボタンが押されたときにそれをVC1に渡そうとしています。押すと、VC1に戻り、セルにオブジェクトが表示されます。前進ではなく後退したいので、セグエは使えないと思います。また、ルートビューコントローラには戻りません。

この問題を除いて、他のすべてはセグエ、プロトコル、およびデリゲートで機能します。デリゲートを試しましたが、機能していないようです。おそらく、デリゲートの間にViewControllerがあるためです。しかし、私はプログラミングに非常に慣れていないので、間違っている可能性があります。助けと指導をいただければ幸いです。

4

1 に答える 1

1

これを行うための現代的な方法(ios6 +)は、くつろぎのセグエを使用することです

storyBoardSegueの単一の引数を取るメソッドを定義することにより、これらの1つを作成します。

- (IBAction)unwindOnSelect:(UIStoryboardSegue *)segue;

このメソッドを、巻き戻したいviewControllerに追加します。

次に、くつろぎたいストーリーボードシーンで...CTRLキーを押しながら「選択」ボタンからシーン下部のバーにある緑色の「終了」記号までドラッグします。巻き戻しセグエは、オプションとしてポップアップに表示されます。それを選択します。ボタンを押すと、その目的地まで巻き戻され、unwindsegueメソッドのコードが実行されます。

segueオブジェクトは、ソースと宛先の両方のviewControllerへの参照を保持しているため、一方から他方にデータを取得する方法です。

  - (void)unwindOnSelect:(UIStoryboardSegue *)segue
{

       self.myObject = segue.sourceViewController.myProperty;

}

ここで、「セレクター「myProperty」の既知のインスタンスメソッドがありません。これを回避する1つの方法は#include "viewController3"、VC1の.hまたは.mファイルの先頭にあることです。同様に型キャストする必要がある場合があります。

       self.myObject = [(ViewController1*)segue.sourceViewController myProperty];

もう1つの方法は、少し間接的な方法です。

if ([segue.sourceViewController respondsToSelector:@selector(myProperty)]) {
    self.myObject = [segue.sourceViewController performSelector:@selector(myProperty)];
     }

これには、必要がないという利点がある#include "viewController3"ため、もう少し分離され、もう少しオブジェクト化されます。

于 2013-03-20T21:16:43.080 に答える