2

IOS では、prepareforsegue を使用してデータを転送し、デリゲートを使用してデータを戻す間で直接分離されたビュー間でデータを渡すことに非常に満足しています。

私が抱えている問題は、4 つのビューを介してセグエするアプリを構築していて、ユーザーが 4 番目のビューで Enter キーを押すと、残りのビューをポップして最初のビュー コントローラーに戻り、それがビューであることですが、データを最初に委任する方法がわかりません。

問題は、最初のView Controllerでデリゲートを設定することにあると思います。そのView Controllerがまだ存在しないため、通常のように segue.destinationviewcontroller を設定することはできません。別の場所に設定する必要がありますか?これを行う適切な方法は何ですか?

4

1 に答える 1

4

このような状況では、委任を使用してデータを渡す代わりに、NSNotificationCenterを使用してビュー コントローラー間で通信することを検討してください。

最初のビュー コントローラーで、通知をリッスンするように登録します。

- (void)viewDidLoad
{
    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(handleFourthViewSubmit:)        
                                                 name:@"fourthViewSubmit" 
                                               object:nil];
}

通知が送信されたときに実行されるメソッドを作成します。

- (void)handleFourthViewSubmit:(NSNotification *)notification {
    NSDictionary *theData = [notification userInfo];  // theData is the data from your fourth view controller

    // pop views and process theData

}

最初のビュー コントローラーの dealloc メソッドでは、オブザーバーとしての登録を必ず解除してください (潜在的なクラッシュを回避するため)。

-(void) dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [super dealloc];
}

次に、4 つ目のビュー コントローラーで、Enter ボタンが押されたときに通知をブロードキャストします。

// note: dataDict should be an NSDictionary containing the data you want to send back to your first view controller
[[NSNotificationCenter defaultCenter] postNotificationName:@"fourthViewSubmit" 
                                                    object:self 
                                                  userInfo:dataDict];
于 2012-09-22T16:08:04.533 に答える