2012-11-23 14 views
5

を見つけられませんでした、私はサービスを公開しようとしたと私のコードはNSNetServiceオブジェクトのデリゲートメソッドに走った:NSNetServiceBrowserは、iPhone(サーバー)上で公開サービス

-(void)netServiceDidPublish:(NSNetService *)sender 

だから私は私のサービスと信じて@"_chatty._tcp."正常に発行されました。その後、別のiPhone(クライアント)に、私は私のサービスを見つけるためにNSNetServiceBrowserを使用しますが、それはデリゲートメソッドに実行されませんでした:私は、答えのほとんどをこのサイトに私の場合に関連するいくつかの質問を見つけた

-(void)netServiceBrowser:(NSNetServiceBrowser *)netServiceBrowser didFindService:(NSNetService *)netService moreComing:(BOOL)moreServicesComing 

デリゲートオブジェクトがスコープ外であるかどうかを確認するように通知します。誰もがその理由を見つける私を助けることができる

-(void)netServiceBrowserWillSearch:(NSNetServiceBrowser *)aNetServiceBrowser 

:それはのような別のデリゲートメソッドに走ったので、私はよく私のデリゲートの仕事と確信していますか?ここで

は、私のコードの一部です:

私はそのようなサービスのinit:ポートは、ブラウザのクラスに与えられたlisteningSocketで初期化され

#define MY_PROTOCOL @"_chatty._tcp." 

self.myService = [[NSNetService alloc] 
        initWithDomain:@"" type:MY_PROTOCOL 
        name:@"thaith" port:self.port]; 

を:

NSNetServiceBrowser* finder = [[NSNetServiceBrowser alloc] init]; 

//I also retain the finder. 
finder.delegate = self; 

[finder searchForServicesOfType:MY_PROTOCOL inDomain:@""]; 
+0

私も同じ問題に直面しています...解決策を見つけましたか? –

答えて

0

私は範囲を狭め、問題のある場所を見つけようとします。まず、サービスが正しく公開されているかどうかを調べます。あなたがサービスを公開する同じローカルネットワーク内のコンピュータ上で、Bonjourブラウザアプリケーション(インターネットで見つけることができます)を使用します。あなたは同じ地元のネットで公開し閲覧することを願っています。 Bonjourブラウザがあなたのサービスを見ることができれば、正しく公開されていることがわかります。その後、ブラウザ側で接続して接続します。

+0

あなたの提案に感謝、はい、私はデリゲートメソッドでブレークポイントを行った - (void)netServiceDidPublish:(NSNetService *)送信者とそれに実行されるので、私は正常に自分のサービスをパブリックだと思う。デリゲートにdidFIndServiceを実行しないでください –

0

可能な解決策

  1. チェックの両方のWiFiの識別子が
  2. が同じクラスとして割り当てNSNetServiceBrowserデリゲートをチェックし、同じWiFiネットワークにはともに同じ
  3. チェックされている

最後にサムをダウンロードしてくださいple Apple.Developer Witap Application、2つのデバイスにインストールし、テストして動作確認します。

+1

私はWitapの例で確認しましたが、私のアプリのように何もしないようです。また、私はwifiアドレスを確認し、手動でそれらを同じネットワークにするように設定しますが、私のappとwitap appでは動作しません。 –

9

同じ問題を抱えて1ヶ月をあきらめた後。私はちょうどそれに戻って来て、それを解決してきました:

the sample code in the docsがNSNetServiceBrowserのローカル変数を使用していない、そうでない場合を意味するように見えても。範囲外になるとすぐにガベージコレクションが行われます。 finderをインスタンス変数またはプロパティにします。 netServiceBrowserWillSearch:デリゲートが呼ばれていたので、私はこれを直ちに見つけませんでした。代わりにボンジュールブラウザをダウンロードする

+0

ここに良いコードサンプルがあります:https://github.com/thesecretlab/LearningCocoa3rdEd/blob/ecc8d34b151c116c4fc3b3296b3c0df1e57171d5/iTunesDetector/iTunesDetector/AppDelegate.m – Ryan

+0

ありがとうございました。これは私の問題を修正しました。 – david72

1

、私はターミナルコマンドを使用することをお勧め:

dns-sd -B _chatty._tcp local. 

は私にとって、それは、サーバー側が正常に動作していることを示しています。 現在のところ、アプリケーションが起動したときにサービスを見つけることができます。唯一の問題は、サーバーを停止すると「削除された」イベントが発生しますが、もう一度実行すると、もう発見できなくなります。私は問題がクライアント側であることを知っています.DNS-sdのおかげで -

関連する問題