2

所以,这是我的问题:我的 iOS 应用程序正在通过本地网络宣传 NSNetService,服务发现运行良好。我也知道我需要先解决我的服务,然后才能读取它的 TXTRecordData。在服务的 -didPublish 委托方法中,我确保我的 TXTRecordData 设置了 NSDictionary。到目前为止,一切都很好...

- (void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser
           didFindService:(NSNetService *)aNetService
               moreComing:(BOOL)moreComing
{
    if (!self.netServicesForResolution) 
        self.netServicesForResolution = [[NSMutableArray alloc] init];

    NSLog(@"serviceBrowser found service: %@, with TXTRecordData: %@", 
          aNetService, aNetService.TXTRecordData);
    [self.netServicesForResolution addObject:aNetService];
    if (!moreComing) [self resolveNetServicesInArray];
}

- (void)resolveNetServicesInArray 
{
    for (NSNetService *service in self.netServicesForResolution) {
        service.delegate = self;
        [service resolveWithTimeout:5];
    }
}

- (void)netServiceDidResolveAddress:(NSNetService *)sender
{
    [self.netServicesForResolution removeObject:sender];
    NSString *dataDict = [NSKeyedUnarchiver unarchiveObjectWithData:sender.TXTRecordData];
    NSLog(@"freshly resolved netService has TXTRecordData: %@", dataDict);
}

如果调用 -netServiceDidResolveAdress 方法,则应用程序崩溃,因为 sender.TXTRecordData 为 nil。但为什么它是零?

提前感谢您的任何回答:D

4

2 回答 2

3

TXT 记录数据似乎与“服务可用”通知分开到达。在我的 netServiceBrowser:didFindService:moreComing: 方法中,我确认传入的 NSNetService 有一个空的 TXT 记录,即使我在发布之前附加了一条 TXT 记录,但后来我收到了一个 netService:didUpdateTXTRecordData: 调用。

于 2013-09-17T19:01:23.133 回答
1

我无法解释为什么 TXTRecordData 为零,但您应该使用 +[NSNetService dictionaryFromTXTRecordData:] 来获取 NSDictionary 而不是 NSKeyedUnarchiver 来获取 NSString。

于 2012-11-11T01:17:05.573 回答