2010-11-13 33 views
1

Existe-t-il un moyen pour que NSConnection recherche une connexion avec un nom enregistré sur, disons un thread séparé, ou planifiée dans la boucle d'exécution, avec un rappel lorsqu'une connexion est établie ? Actuellement, je suis en utilisantDésactiver NSConnection jusqu'à ce que la connexion pour le nom enregistré soit trouvée

[NSConnection connectionWithRegisteredName:kRemotePreferencesDOName host:nil]

mais retourne simplement (je pense nul) si la connexion ne se trouve pas, au lieu de décrochage ou autrement donner un rappel. Bien que cela ait un sens pour une relation serveur-client, le 'serveur' et le 'client' sont tous les deux des applications, qui peuvent ou non être ouvertes à tout moment, indépendamment de l'autre, il est donc très probable que le client sera ouvrir et faire quelque chose quand le serveur se lance (et enregistre son nom). À ce stade, idéalement, le client sera informé/une connexion sera créée sur le serveur. Si cela vous aide, cela permet en partie à un volet Préférences Système de contrôler l'application NSUserDefaults d'une application cible (en arrière-plan uniquement), qui peut ou non s'exécuter lorsque l'utilisateur ouvre le volet de préférences. Utilisez simplement la boucle pour attendre que l'objet distant soit prêt.

Répondre

1

Utilisez Thread si l'application souhaite effectuer une autre opération en attendant la connexion.

NSDistantObject *pObj = nil; 

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

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