2

私が取り組んでいるiphoneアプリでは、カスタムクラスを使用してホストとのネットワーク通信を管理しています。protocolClass というクラスは、appDelegate では ivar であり、applicationDidFinishLaunching: メソッドでは alloc + init です。

これで、protocolClass がホストからデータを受信するたびに、デリゲート (appDelegate として設定) で protocolClassDidReceiveData: メソッドが呼び出されます。次に、UINavigatorController の customViewControllers の 1 つでデータを更新する必要があります。

appDelegate で更新する必要がある customViewController への参照を追加する必要がありますか? または他のより効率的な方法はありますか?

customViewcontroller への参照を保持する場合、メモリ使用量の影響は何ですか?

前もって感謝します。

4

2 に答える 2

2

はい、通知はそれを行うための良い方法です。また、モデルがコントローラー [つまり、ViewController] を更新したい場合、通知はそれを行う良い方法です。私の場合、SSDP (AsyncUdpSocket を使用) を使用してデバイスを検出しようとしていますが、デバイスが見つかったときにビュー コントローラーを更新/通知したいと考えていました。これは非同期なので、データを受信するときは通知を使用しました。これが私がした簡単なことです:

viewDidLoad で (init をオーバーライドしようとしましたが、うまくいきませんでした) - 次のように通知用に ViewController を登録しました。

*NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
    [nc addObserver:self
           selector:@selector(foundController:) 
               name:@"DiscoveredController"
             object:nil];

私のViewControllerのセレクターは次のとおりです。

// receive the notification
- (void)foundController:(NSNotification *)note
{
    self.controllerFoundStatus.text = @"We found a controller";
}

私の「モデル」[App Delegateではありません-デバイス「serviceSSDP」を検出するために使用する新しいクラスを作成しました。次のように通知を投稿するだけでした:

[[NSNotificationCenter defaultCenter] postNotificationName:@"DiscoveredController" object:nil];

それでおしまい。この通知の投稿は、SSDP の発見に対して正しい応答が得られたときに行われます [具体的には:

- (BOOL)onUdpSocket:(AsyncUdpSocket *)sock 
     didReceiveData:(NSData *)data 
            withTag:(long)tag 
           fromHost:(NSString *)host 
               port:(UInt16)port

AsyncUdpSocket の。

于 2012-03-02T03:41:38.370 に答える