Выключать 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.]];
}