Выключать NSConnection до тех пор, пока не будет найдено соединение для зарегистрированного имени

Есть ли способ заставить NSConnection искать соединение с зарегистрированным именем, скажем, в отдельном потоке или по расписанию в цикле выполнения, с обратным вызовом при установлении соединения? В настоящее время я использую

[NSConnection connectionWithRegisteredName:kRemotePreferencesDOName host:nil]

но это просто возвращает (думаю, ноль), если соединение не найдено, а не останавливается или иным образом вызывает обратный вызов. Хотя это имеет смысл для отношений сервер-клиент, оба "сервер" и "клиент" являются просто приложениями, которые могут открываться или не открываться в любое время, независимо от других, поэтому весьма вероятно, что клиент будет открывать и делать что-то, когда сервер запускается (и регистрирует свое имя). На этом этапе в идеале клиент должен быть уведомлен / будет установлено соединение с сервером.

Если это помогает, это часть способа для панели предпочтений Системных настроек управлять NSUserDefaults целевого (только фонового) приложения, которое может запускаться или не запускаться, когда пользователь открывает панель предпочтений.

1 ответ

Просто используйте цикл while для ожидания готовности удаленного объекта. Используйте Thread, если приложение хочет выполнить какую-либо другую операцию во время ожидания соединения.

NSDistantObject *pObj = nil;

while(nil == pObj)
{
    pObj = [[NSConnection rootProxyForConnectionWithRegisteredName:kRemotePreferencesDOName
                                                              host:nil] retain];

    [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1.]];
}
Другие вопросы по тегам