2

Apple が提供する Master-View テンプレート (MasterViewController と DetailViewController の 2 つの ViewController で構成されています) に基づいてアプリを開発しています。サーバーと通信するためのモデルを追加しました。

ただし、モデルがサーバーからメッセージを受信すると、MasterViewController または DetailViewController クラスのメソッドを呼び出す必要があります。これどうやってするの?

すべてのヘルプは大歓迎です。

4

4 に答える 4

3

マスター ビュー コントローラーと詳細ビュー コントローラーによって処理される、モデルからの通知を起動できます。

モデルでは:

- (void)receivedMessageFromServer {
    // Fire the notification
    [[NSNotificationCenter defaultCenter] postNotificationName:@"ReceivedData" 
                                                        object:nil];   
}

View Controller で「ReceivedData」通知を処理します。

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

- (void)receivedDataNotification:(id)object {
    NSLog(@"Received Data!");
}
于 2012-05-27T17:21:03.773 に答える
3

実際、Apple が提案する MVC パターンでは、モデルからコントローラーへの通知が可能です。

この目標を達成するための良い方法は、データが変更されたときに NSNotificationCenter を介して NSNotification オブジェクトを配信変更内容に関する情報を提供し、リスナーにそれを処理させることです。

于 2012-05-27T17:26:40.920 に答える
2

オプションのプロトコル デリゲート メソッドを使用する必要があります。このPOでデリゲート メソッドを設定する方法の例を示した回答があります。

于 2012-05-27T18:44:38.330 に答える
1

ブロックは行く方法です。

ViewController でモデルへの参照が必要です。データを更新する場合は、モデルにメッセージを送信し、サーバーから応答を受信したときに呼び出されるパラメーターとしてブロックを渡します。

例えば:

ビューコントローラー

[self.model fetchDataFromRemoteWithCompletionHandler:^(id responseObject, NSError *error)
{
    // responseObject is the Server Response
    // error - Any Network error
}];

モデル

-(void)fetchDataFromRemoteWithCompletionHandler:(void(^)(id, NSError*))onComplete
{
    // Make Network Calls
    // Process Response
    // Return data back through block
    onComplete(foobarResponse, error);
}
于 2014-09-06T17:46:33.767 に答える