6

我试图在 didFindService 函数中获取 TXTrecords,但我发现该值为 null。

你有什么想法来解决我的问题吗?

- (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];
    }
}
4

3 回答 3

7

您需要先解决服务。在回调中,您所知道的只是服务存在,但您没有它的记录(既没有它的 A 也没有它的 TXT)。

你可以用-resolveWithTimeout:它来解决它。-startMonitoring如果您需要在修改 TXT 记录时收到通知,您也可以使用。

于 2012-09-06T19:48:38.820 回答
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];
    }
}
于 2012-09-11T09:03:32.877 回答
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 的对象)。我的问题是解决所有服务。

于 2012-09-10T21:39:51.747 回答