Делегат NSNetServiceBrowser не вызывается при поиске

У меня действительно неприятная проблема. Я пытаюсь найти NSNetService (который, как я знаю, существует). Я скопировал пример кода из http://www.macresearch.org/cocoa-scientists-part-xxviii-bonjour-and-how-do-you-do в свое собственное приложение. Я вижу (в примере программы), что мой сервис создан. Но когда я нажимаю поиск и запускаю поиск NSNetServiceBrowser, ничего не происходит. Функция делегата newer вызывается

 -(void)netServiceBrowser:(NSNetServiceBrowser *)aBrowser didFindService:(NSNetService *)aService moreComing:(BOOL)more {

Я проверял такие вещи, как мои объекты все еще сохраняются, и я не вижу, чтобы что-то было выпущено (и у меня нет GC). У кого-нибудь есть идеи, что делать? Код точно такой же, как в примере, только вокруг него есть кое-что другое (запуск окна openGL).


person Jonas Jongejan    schedule 19.08.2010    source источник
comment
Вы уверены, что назначили нужного делегата экземпляру NSNetServiceBrowser?   -  person fbrunel    schedule 21.12.2010
comment
У меня точно такая же проблема. Но он вызывается только тогда, когда я публикую службу и ищу ее с одного и того же устройства, но при тестировании с двумя устройствами никогда не находит службу.   -  person Daniel Sanchez    schedule 25.05.2012


Ответы (1)


Этот вопрос устарел (эпоха iOS 4/5?), поэтому я не уверен, что это ответ для вас, но убедитесь, что вы используете NSNetServiceBrowser только из основного потока вашего приложения.

(Я не могу вспомнить, должен ли он также быть инициализирован в основном потоке, или он должен быть просто инициализирован и вызван -search из того же потока, или достаточно вызвать -search из основного потока, но у меня было точно такая же проблема, и в моем случае это было каким-то образом связано с использованием фонового потока.Извините за расплывчатый ответ.)

person TaylanKammer    schedule 25.03.2014
comment
Только что проверил это сам, вам также нужно инициировать NSNetService из самого основного потока. Простое назначение делегата и выполнение вызова, такого как NSNetService searchForServicesOfType... только в основном потоке, не сработает. Я бросил материал сетевого сервиса в dispatch_async(dispatch_get_main_queue(), ^{ ... }); блокировать. - person Vivek Gani; 12.08.2014
comment
На самом деле вам не нужно использовать NSNetService в основном потоке. Вам нужно убедиться, что вы вызываете [[NSRunLoop currentRunLoop] run] в потоке, в котором вы инициализируете NSNetService. Основной цикл выполнения выполняется по умолчанию, но другие потоки могут не работать. - person psilencer; 11.07.2018