首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSNetServiceBrowser in iOS6不起作用

NSNetServiceBrowser in iOS6不起作用
EN

Stack Overflow用户
提问于 2013-01-05 00:25:27
回答 2查看 2K关注 0票数 0

我在做台式机客户端在本地网络上打电话的广告。我的手机是6.0.2,Xcode 4.5.2。

我知道桌面应用程序正在成功注册,因为我手机上的发现应用程序(Tildesoft)显示了我在网络上的服务(这也排除了wifi问题)。

我已经下载了苹果应用程序示例Bonjour Web。查找"_myservice._tcp“的委托从来没有触发过,但是开始浏览方法确实会触发。

我尝试使用HHServices (包装DNSService),当开始浏览方法启动时,服务查找方法没有启动。

在我自己的应用程序中,我尝试使用NSNetServiceBrowser。我设置了委托,我的"netServiceBrowserWillSearch“委托方法就会被触发,但其他任何事情都不会发生。

如果要验证,则附加代码。

标题:

代码语言:javascript
复制
#import <UIKit/UIKit.h>
@interface ClientFinder_ViewController : UIViewController<UITableViewDataSource, UITableViewDelegate,NSNetServiceBrowserDelegate>

@property (weak, nonatomic) IBOutlet UITableView *availableClientsTableView;


-(void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindDomain:(NSString *)domainString moreComing:(BOOL)moreComing;
-(void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindService:(NSNetService *)aNetService moreComing:(BOOL)moreComing;
-(void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didNotSearch:(NSDictionary *)errorDict;
-(void)netServiceBrowserDidStopSearch:(NSNetServiceBrowser *)aNetServiceBrowser;
-(void)netServiceBrowserWillSearch:(NSNetServiceBrowser *)aNetServiceBrowser;

@end

相关执行情况:

代码语言:javascript
复制
- (void)viewDidLoad
{
    [super viewDidLoad];
    dictionaryFoundClients = [[NSMutableDictionary alloc] initWithCapacity:1];
    [self addLogoToNabar];
    [self listen];
}

-(void)listen{
    NSNetServiceBrowser *serviceBrowser = [NSNetServiceBrowser new];
    [serviceBrowser setDelegate:self];
    [self.netServiceBrowser searchForServicesOfType:TYPE inDomain:domain];
}


-(void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindDomain:(NSString *)domainString moreComing:(BOOL)moreComing{
    NSLog(@"aNetServiceBrowser didFindDomain");
}


-(void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindService:(NSNetService *)aNetService moreComing:(BOOL)moreComing{
    NSLog(@"aNetServiceBrowser didFindService");
    [dictionaryFoundClients setObject:aNetService forKey:aNetService.hostName];
    NSLog(@"Found service: %@ @ %@", aNetService.name, aNetService.hostName);
}

-(void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didNotSearch:(NSDictionary *)errorDict{
    NSLog(@"aNetServiceBrowser didNotSearch. Errors enumerated");
    for(int a=0; a< errorDict.count; a++){
        NSString *key = [[errorDict allKeys] objectAtIndex:a];
        NSString *val = [errorDict objectForKey:key];
        NSLog(@"%@: %@", key, val);
    }
}

-(void)netServiceBrowserDidStopSearch:(NSNetServiceBrowser *)aNetServiceBrowser{
    NSLog(@"netServiceBrowserDidStopSearch");
}

-(void)netServiceBrowserWillSearch:(NSNetServiceBrowser *)aNetServiceBrowser{
    NSLog(@"netServiceBrowserWillSearch");
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-14 17:48:26

不知道它为什么开始工作,但下面是我的工作代码:

代码语言:javascript
复制
    [self stopCurrentResolve];
    [self.netServiceBrowser stop];
    [self.services removeAllObjects];

    NSNetServiceBrowser *aNetServiceBrowser = [[NSNetServiceBrowser alloc] init];
    if(!aNetServiceBrowser) {
        // The NSNetServiceBrowser couldn't be allocated and initialized.
        return NO;
    }

    aNetServiceBrowser.delegate = self;
    self.netServiceBrowser = aNetServiceBrowser;
    [self.netServiceBrowser searchForServicesOfType:type inDomain:domain];
票数 0
EN

Stack Overflow用户

发布于 2013-01-12 05:01:49

如果所有这些都是本地的,则需要使用searchForServicesOfType:方法而不是searchForRegistrationDomains方法。

代码语言:javascript
复制
-(void)listen{
  NSNetServiceBrowser *serviceBrowser = [NSNetServiceBrowser new];
  [serviceBrowser setDelegate:self];
  [serviceBrowser searchForServicesOfType:@"_your_service_type._tcp" inDomain:@""];;
}

"_your_service_type._tcp“是桌面应用程序在宣传其服务时使用的服务类型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14167165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档