Hi Chris,
I'm not terribly sure what you are asking for here. From my
experience (limited experience admittedly) theres really only one
way to use NSConnection.
its a pretty elegant class, which is simple, and works as expected,
except for when garbage collection is enabled.
heres what I do just after NSNetService finds a service:
// Sent when a service appears
- (void)netServiceBrowser:(NSNetServiceBrowser *)browser
didFindService:(NSNetService *)aNetService
moreComing:(BOOL)moreComing
{
NSMutableDictionary* newDict = [[NSMutableDictionary alloc] init];
[newDict setValue:aNetService forKey:@"theService"];
[serverArrayController addObject:newDict];
[aNetService setDelegate:self];
[aNetService resolveWithTimeout:5];
if(!moreComing)
{
}
}
// NSNetService Delegate method:
- (void)netServiceDidResolveAddress:(NSNetService *)sender{
id proxy = nil;
NSData *addy;
NSSocketPort* socket;
NSConnection* connection;
NSString* hostname;
int a;
int i;
hostname = [sender hostName];
socket = (NSSocketPort*)[[NSSocketPortNameServer sharedInstance]
portForName:@"BKOtherPort" host:hostname];
connection = [NSConnection connectionWithReceivePort: nil
sendPort: socket];
@try{
proxy = [connection rootProxy];
}
@catch(id exception){
proxy = nil;
}
addy = [socket address];
if(proxy){
// app level stuff if the proxy exists
}
}
pretty straight forward,
and every time I ran it with garbage collection on, the
NSConnection initialized, but NEVER returned the proxy. it returned
nil.
all my instance variables were populated, everything on My end was
correct... or at least behaving as expected. it just wouldn't
return the proxy object (or the root for that matter)
All I did to fix it, was to turn off garbage collection.
That part runs like a champ now. the rest of the app won't do
anything anymore, as it was built on garbage collection.
cheers,
-eb