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

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

[NSConnection connectionWithRegisteredName:kRemotePreferencesDOName host:nil]

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

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

1 Ответ

1 голос
/ 29 апреля 2011

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

NSDistantObject *pObj = nil;

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

    [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1.]];
}
...