2

私のアプリでは、UINavigationControllerを使用しています。スタックで実行されている「親」UIViewControllerと「子」UIViewControllerがあります。ユーザーは、後で親に影響を与えると想定される子に対していくつかの設定を行うことができます。NSUserDefaultsを使用してデータを保存および取得しましたが、NSLogによると正常に機能しているようです。

私がはっきりしていないのは、子供から戻ってきたら、どのようにデータを「更新」するのかということです。

具体的に説明します。子には、popViewControllerAnimatedを実行する[戻る]ボタンがあり、親に戻ります。viewDidLoadにあるすべてのメソッドを再実行して、NSUserDefaultsデータから取得した変更で親ビューフィールドが設定されるようにします。

  1. 親メソッドのどこで、ビューに「更新」するように指示する必要がありますか?
  2. この更新アクションを実行するにはどうすればよいですか?viewDidLoadをもう一度呼び出す必要がありますか?setNeedsDisplayと呼ばれるものについて読みましたが、それを使用する必要がある場合、構文は何ですか( "[self .view setNeedsDisplay]"または他の何か)?

誰かが指示して詳しく説明できますか?

4

3 に答える 3

4

NSNotificationを見てください。コードのある部分から別の部分に更新を送信する簡単な方法は、Appleの組み込みのNSNotificationシステムです。

  1. 送信したいアップデートがある場合は、に電話してくださいpostNotificationName。作成する一意の文字列(「<em> com.razeware.imagegrabber.imageupdated」など)とオブジェクト(画像のダウンロードを終了したばかりのImageInfoなど)を指定するだけです。

  2. この更新がいつ行われるかを知りたい場合は、を呼び出しますaddObserver:selector:name:object。この場合、ImageListViewControllerは、これがいつ発生するかを知りたいので、適切なテーブルビューセルをリロードできます。これを配置するのに適した場所は、viewDidLoadです。

  3. removeObserver:name:objectビューがアンロードされたときに呼び出すことを忘れないでください。そうしないと、通知システムがアンロードされたビュー(またはさらに悪いことに未割り当てのオブジェクト)でメソッドを呼び出そうとする可能性があり、これは悪いことです!RayWenderlichブログ経由

于 2011-08-02T15:49:33.107 に答える
2

NSUserDefaultsDidChangeNotificationルートビューコントローラを更新するためのトリガーとして使用できます。

于 2011-08-02T13:40:51.007 に答える
0

ViewControllerをNavigationViewControllerへのデリゲートとして設定することもできます

self.navigationController.delegate = self;

次に、メソッドでデリゲート呼び出しを受け取ります。

- (void)navigationController:(UINavigationController *)navigationController
       didShowViewController:(UIViewController *)viewController 
                    animated:(BOOL)animated {
    NSLog(@"Did Show controller %@", viewController);
    // Return from child
    if ([viewController isKindOfClass:[SRPeopleViewController class]]) {
        [self loadData];
    }

}

このソリューションの小さな欠点(またはコスト)は、必要以上の呼び出しを受信するため、フィルタリングが必要になることです。

于 2014-12-08T14:31:57.000 に答える