NSNetServiceとNSNetServiceBrowserを使用して、ネットワーク上の Bonjour サービスを公開およびスキャンしています。実装は正常に機能しており、サービスはネットワーク上で検出され、通信可能です。私は現在、フレームワークのライフサイクルとこれまでに得たものを理解しようとしています:
// Scanning
netServiceBrowserWillSearch:
netServiceBrowser:didFindService:moreComing: // The device finds itself
// Advertising
netServiceWillPublish:
netServiceDidPublish:
これは、アダプターをオンにしてサービスを開始すると発生します。ここで、サービスがネットワーク上でアクティブにアドバタイズされているかどうかを常に把握する必要があります。つまり、他のデバイスがそれを見つけることができるかどうかです。そこで、Wi-Fi アダプターをオフにしてテストします。
netServiceBrowser:didRemoveService:moreComing:
netServiceBrowser:didFindService:moreComing: // The device finds itself again, even after the adapter is turned off
次に、アダプターをオンに戻します。
netServiceBrowser:didRemoveService:moreComing:
netServiceBrowser:didFindService:moreComing: // Yet again
問題は、アダプターのオンとオフの違いがまったくないため、パターンを探すことができないことです。これらのイベントをキャッチできる他の方法はありますか?
編集:最悪になります。両方のアダプターをオフ (機内モード) にしてサービスを開始しても、netServiceDidPublish:が呼び出されます。これまでのところ、netServiceDidNotPublish:は、同じサービスを 2 回登録しようとしたときにのみ呼び出されるようです。これは私にとって非常に直感的ではありません。サービスがネットワークではなくアダプターに公開された可能性があるため、これらのコールバックは非常に誤解を招く可能性があります。この時点で、サービスがネットワーク上で表示されているかどうかを知る方法はありません。