2013-01-05 56 views
0

我正在向本地網絡上的手機廣告桌面客戶端。我的手機在Xcode 4.5.2上是6.0.2。Bonjour NS6ServiceBrowser在iOS6不工作

我知道桌面應用程序正在註冊成功,因爲我的手機上的發現應用程序(by Tildesoft)顯示我的網絡服務(這也排除了無線網絡問題)。

我已經下載了蘋果應用示例Bonjour Web。查找「_myservice._tcp」的代表並沒有觸發,但開始的瀏覽方法確實觸發了。

我嘗試使用HHServices(它包裝DNSService),並且當啓動瀏覽方法被觸發時,服務找到的方法不會觸發。

在我自己的應用,我試過使用NSNetServiceBrowser。我設置了委託,並且我的「netServiceBrowserWillSearch」委託方法被觸發,但沒有其他事情發生。

如果要驗證,則附上代碼。

頁眉:

#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 

相關實施:

- (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"); 
} 
+0

這看起來類似於其他線程,我的答案是[這裏] [1] [1] :http://stackoverflow.com/a/17259893/1850244 – vedrano

回答

0

不知道爲什麼它開始工作,但這裏是我工作的代碼:

[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

如果這是所有地方,你需要使用searchForServicesOfType:方法,而不是searchForRegistrationDomains方法。

-(void)listen{ 
    NSNetServiceBrowser *serviceBrowser = [NSNetServiceBrowser new]; 
    [serviceBrowser setDelegate:self]; 
    [serviceBrowser searchForServicesOfType:@"_your_service_type._tcp" inDomain:@""];; 
} 

「_your_service_type._tcp」是服務類型時,公佈其服務您的桌面應用程序使用。

+0

我道歉,在我通過代碼發佈之前,我試圖讓NSNetServiceBrowser做*任何*。我會編輯我的問題。我現在實際上有了一個答案。 –

相關問題