NSNetservice没有获得netServiceDidPublish委托调用

dok*_*kon 2 bonjour objective-c nsnetservice

我想要做的是在我的ipod touch上启用一个简单的bonjour服务.在我发布我的自定义bonjour服务后,委托人没有得到"netServiceDidPublish:"调用.我还检查"netService:(NSNetService*)sender didNotPublish:"中没有任何错误消息.以下是我的代码部分:

// AsyncSocket class comes from an awesome project: cocoa async socket.
// http://code.google.com/p/cocoaasyncsocket/
AsyncSocket* listenSocket;

listenSocket = [[AsyncSocket alloc] initWithDelegate:self];
NSError *error;
if (![listenSocket acceptOnPort:0 error:&error])
{
    NSLog(@"Error starting server: %@", error);
    return NO;
}

int port = [listenSocket localPort];

NSLog(@"Server started on port: %hu", port);
isRunning = YES;

// register itself to bonjour service.
netService = [[[NSNetService alloc] initWithDomain:@"local."
                                             type:@"_sampleservice._tcp" 
                                             name:@"myservice" 
                                             port:port] autorelease];

if (!netService)
{
    NSLog(@"Failed to enable net service");
    [listenSocket disconnect];
    return NO;
}

[netService setDelegate:self];
[netService scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
//[netService publishWithOptions:NSNetServiceNoAutoRename];
[netService publish];
Run Code Online (Sandbox Code Playgroud)

在这段代码之后,我可以获得"netServiceWillPublish"委托调用,但没有"netServiceDidPublish"有人有任何想法吗?提前致谢.

Lil*_*ard 6

我发现了两件事.首先,-scheduleInRunLoop:forMode:除非您需要将其移动到不同的runloop(或模式),否则不应该调用.默认情况下,它已经安排在当前的运行循环中.其次,您似乎是自动释放该服务,这意味着一旦您返回到runloop,它就会被释放并释放.你需要把它粘在伊塔尔或财产中并坚持下去.