2012-09-06 41 views
4

我試圖讓在didFindService功能TXTrecords,但我發現值爲null。如何閱讀TXT記錄與蘋果的Bonjour於iOS

你有什麼想法,解決我的問題呢?

- (void)netServiceBrowser:(NSNetServiceBrowser*)netServiceBrowser didFindService:(NSNetService*)service moreComing:(BOOL)moreComing { 
    [self.services addObject:service]; 

    NSDictionary* dict = [[NSNetService dictionaryFromTXTRecordData:[service TXTRecordData]] retain]; 
    MyTreeNode *node = [[MyTreeNode alloc] initWithValue:[service name]]; 
    NSString* info = [self copyStringFromTXTDict:dict which:@"info"]; 
    if([info isEqualToString:@"child"]) { // info == null and dict == null?? 
     [treeNode addChild:node]; 
    } 
    [info release]; 
    if (!moreComing) { 
     [self sortAndUpdateUI]; 
    } 
} 

回答

1

我的問題在這裏解決的是最終代碼:

- (void)netServiceBrowser:(NSNetServiceBrowser*)netServiceBrowser didFindService:(NSNetService*)service moreComing:(BOOL)moreComing { 
    [service setDelegate:self]; 
    [service resolveWithTimeout:0.0]; 
    [self.services addObject:service]; 

    if (!moreComing) { 
     [self sortAndUpdateUI]; 
    } 
} 
7

您需要先解決服務問題。在回調中,你所知道的只是服務的存在,但你沒有它的記錄(既不是它的A也不是它的TXT)。

您可以使用-resolveWithTimeout:來解決它。如果您需要在修改TXT記錄時收到通知,您還可以使用-startMonitoring

+0

我添加[服務resolveWithTimeout:20]行[self.services ADDOBJECT:服務]之後,但我有同樣的問題 – developer

+0

@AhmedZRIBI:難道你閱讀關於該方法的文檔?您需要等待回調,告訴您服務已經解決。 –

1

我改變了我的didFindService功能如下(我的應用程序是基於蘋果「BonjourWeb」的例子):

- (void)netServiceBrowser:(NSNetServiceBrowser*)netServiceBrowser didFindService:(NSNetService*)service moreComing:(BOOL)moreComing { 
    [self.services addObject:service]; 
    NSInteger i,n = [self.services count]; 
    for(i=0;i<n;i++) 
    { 
     NSLog(@"%d %@",i,[[self.services objectAtIndex:i]name]); 
     if (self.currentResolve) { 
      [self stopCurrentResolve]; 
     } 
     self.currentResolve = [self.services objectAtIndex:i]; 
     [self.currentResolve setDelegate:self]; 
     [self.currentResolve resolveWithTimeout:0.0]; 
     self.timer = [NSTimer scheduledTimerWithTimeInterval:20.0 target:self selector:@selector(showWaiting:) userInfo:self.currentResolve repeats:NO]; 
    } 

    if (!moreComing) { 
     [self sortAndUpdateUI]; 
    } 
} 

我跑我的應用程序注意到,功能netServiceDidResolveAddress調用一次,它解決只有數組self.services的最後一個元素(我有11個服務,它只解決了索引爲10的對象)。 我的問題是要解決所有的服務。