Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSNetServiceBrowser找不到存在的服务_Objective C_Macos_Bonjour_Nsnetservicebrowser - Fatal编程技术网

Objective c NSNetServiceBrowser找不到存在的服务

Objective c NSNetServiceBrowser找不到存在的服务,objective-c,macos,bonjour,nsnetservicebrowser,Objective C,Macos,Bonjour,Nsnetservicebrowser,我有一个定制的Cocoa(OSX)服务器和客户端,服务器发布了一个bonjour服务。我让客户端使用NSNetServiceBrowser搜索服务器,但从未得到任何结果。我知道该服务已发布,因为它位于mdns-B\u myservicecype.\u tcp的输出中。我的搜索和发布代码使用相同的域名、名称和类型进行搜索和发布,与Apple示例代码几乎相同。以下是发布代码: service = [[NSNetService alloc] initWithDomain:@"" type:@"_sci

我有一个定制的Cocoa(OSX)服务器和客户端,服务器发布了一个bonjour服务。我让客户端使用
NSNetServiceBrowser
搜索服务器,但从未得到任何结果。我知道该服务已发布,因为它位于
mdns-B\u myservicecype.\u tcp
的输出中。我的搜索和发布代码使用相同的域名、名称和类型进行搜索和发布,与Apple示例代码几乎相同。以下是发布代码:

service = [[NSNetService alloc] initWithDomain:@"" type:@"_scijs._tcp" name:@"ScienceJeopardyServer" port:4567];
[service publish];
以下是搜索和委派方法:

[sbrows setDelegate:self];
[sbrows searchForServicesOfType:@"_scijs._tcp" inDomain:@""];
-(void)netServiceBrowserWillSearch:(NSNetServiceBrowser *)aNetServiceBrowser {
    [self.statusLabel setStringValue:@"Searching for server..."];
    [self.serverIndicator setHidden:NO];
    [self.serverIndicator startAnimation:self];
}

-(void)netServiceBrowser:aNetServiceBrowser didNotSearch:(NSDictionary *)errorDict {
    [self.statusLabel setStringValue:@"Error finding server."];
    [self.serverIndicator stopAnimation:self];
    [self.serverIndicator setHidden:YES];
}

-(void)netServiceBrowserDidStopSearch:(NSNetServiceBrowser *)aNetServiceBrowser {
    [self.serverIndicator stopAnimation:self];
    [self.serverIndicator setHidden:YES];
}

-(void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindService:(NSNetService *)aNetService moreComing:(BOOL)moreComing {
    [aNetServiceBrowser stop];
    NSLog(@"Found server.");
    [self.statusLabel setStringValue:@"Resolving service..."];
    [aNetService setDelegate:self];
    [aNetService resolveWithTimeout:10.0];
}
以下是委托方法:

[sbrows setDelegate:self];
[sbrows searchForServicesOfType:@"_scijs._tcp" inDomain:@""];
-(void)netServiceBrowserWillSearch:(NSNetServiceBrowser *)aNetServiceBrowser {
    [self.statusLabel setStringValue:@"Searching for server..."];
    [self.serverIndicator setHidden:NO];
    [self.serverIndicator startAnimation:self];
}

-(void)netServiceBrowser:aNetServiceBrowser didNotSearch:(NSDictionary *)errorDict {
    [self.statusLabel setStringValue:@"Error finding server."];
    [self.serverIndicator stopAnimation:self];
    [self.serverIndicator setHidden:YES];
}

-(void)netServiceBrowserDidStopSearch:(NSNetServiceBrowser *)aNetServiceBrowser {
    [self.serverIndicator stopAnimation:self];
    [self.serverIndicator setHidden:YES];
}

-(void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindService:(NSNetService *)aNetService moreComing:(BOOL)moreComing {
    [aNetServiceBrowser stop];
    NSLog(@"Found server.");
    [self.statusLabel setStringValue:@"Resolving service..."];
    [aNetService setDelegate:self];
    [aNetService resolveWithTimeout:10.0];
}

大部分只是GUI代码和NSlog,但我从未得到GUI更改或NSlog。有人有解决方案吗?

很可能是在您的客户中

  • 在委托方法中设置断点
  • 确保
    sbrows
    未超出范围。如果它不在范围内,将调用搜索,则不会调用其他响应

  • 非常感谢,这是一个涉及范围的微妙问题+1、接受!那你是怎么解决的?我也有同样的问题。