0

簡単なことだとわかっているので、これを尋ねるのは無知だと思います。目標: ビューを離れてからビューに戻った後も変数を保持します。

例: MainViewCategoryView、および (ドラムロール) ProjectViewがあるとします。

アプリケーションがMainViewに開き、テーブルが表示されます。ユーザーは、カテゴリを選択することを選択します。このセグエはCategoryViewへのそれらです。選択したら、選択したカテゴリをMainViewに送り返します。経由

    -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

ここでは問題ありません。MainView は変数を受け取り、選択したカテゴリを「カテゴリ」セクションのサブテキストとして表示します。次に、ユーザーはプロジェクト名を選びたいと考えています (これも定義済みのリストです)。ユーザーは項目を選択し、変数を MainView に送り返します。

-- メイン ビューに戻ると、以前は「選択された」カテゴリを保持していた NSString 変数が null になっている理由を誰かが (優しく) 説明してくれませんか?

私の NSString selectedProject は正しく保持されていませんか? ここで行うべき正しい実装は何ですか? または、何が欠けていますか?私は本当に何が起こっているのかを理解しようとしているので、何かが大きな助けになります.

MainView インターフェイス

    @interface MainViewController : UIViewController {
        NSString *selectedProjectName;
        NSString *selectedCategory;
    }

    @property (nonatomic, retain) NSString *selectedProjectName;
    @property (nonatomic, retain) NSString *selectedCategory;

    @end

MainView の実装

    @implementation MainViewController
    @synthesize selectedCategory, selectedProjectName;

必要に応じて.. ProjectView の実装

  -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    if ([[segue identifier] isEqualToString:@"masterSegue"]) {
    MainViewController *vc = (MainViewController *)[segue destinationViewController];

    LogValues *lv = [LogValues alloc];

    lv.project = @"Test Project Name";
    vc.selectedProjectName = lv.project;
    } 
    }
4

2 に答える 2

0

わかりました、あなたの問題は、同じインスタンスに戻っていないことです。セグエについて非常に重要なことを 1 つ見逃しています。セグエは常に新しいビュー コントローラをインスタンス化します。したがって、モーダル セグエを使用してメイン ビュー コントローラーに「戻る」場合は、そのコントローラーの新しいインスタンスを作成するだけです。アンワインド セグエ以外を使用して、ストーリーボードで (以前のコントローラーに) 戻ることは絶対にしないでください。アンワインドは、常に新しいインスタンスを作成するセグエに関する規則の例外です。

したがって、2 つの選択肢があります。データを宛先コントローラーに送り返すために prepareForSegue を実装できるため、アンワインド セグエを使用できます。データの返送を委任します。

于 2013-05-16T03:28:41.110 に答える
-1

So of course immediately after posting I see a thread in the side that I believe helps. The solution was to store the values in the AppDelegate which is working fine.

I feel however there are other ways to achieve the same result without having to rely on the AppDelegate and would love to hear other solutions.

于 2013-05-16T02:21:15.357 に答える