我正在为我正在开发的iOS项目开发的应用程序中使用Bonjour(确切地说是NSNetServiceBrowser)而不是WiFi。
然而,尽管注意到在Why does NSNetServiceBrowser find unpublished services in iPhone OS?的出色回应中提出的问题,我仍然遇到了一些与NSNetSericeBrowser有关的困难。
我的设置如下:
但是,我遇到了以下问题: -
我遇到的问题很奇怪,因为Bonjour 90%的时间都在工作......只有10%会破坏我的应用程序的可靠性!令人讨厌的是,通过双击主页按钮并强制关闭应用程序,然后重新运行它,可以解决上述所有问题。再次运行后,它总是找到正确的会话或正确发布。
避免这个问题的一种方法是在无线网络发生变化时拆除并重新启动NSNetServiceBrowser ......但这似乎非常混乱和不必要。令人沮丧的是,Bonjour是一个高级API,没有任何实际的调整和测试选项。
我有什么想法可以解决问题1-4?
谢谢!
答案 0 :(得分:6)
好的,我设法解决了 - 如果其他人遇到Bonjour / NSNetServiceBrowser的这些可靠性问题,这是我的解决方案:
<强> 1。按如下方式安排NSNetService和NSNetServiceBrowsers:
[netService scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[netServiceBrowser scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
<强> 2。确保从NSNetServiceBrowserDelegate实现netServiceBrowser:didNotSearch:方法。
当NSNetService无法发布时(无论出于何种原因),这将被触发。我所做的是在其中放置一个UIAlertView,向用户显示一条消息,说无法完成搜索并且应该检查他们的网络连接。浏览似乎一旦能够这样做就会自动重启(但我需要研究一下,也许我的代码中有些东西会让它发生......)