[英]How to read TXT records with apple bonjour for iOS
我試圖在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];
}
}
您需要先解決服務。 在回調中,您所知道的是服務存在,但您沒有其記錄(既不是A也不是TXT)。
您可以使用-resolveWithTimeout:
來解決它。 如果需要在修改TXT記錄時收到通知,也可以使用-startMonitoring
。
我更改了我的didFindService函數,如下所示(我的應用程序基於Apple“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的對象)。 我的問題是解決所有服務問題。
我的問題解決了這里是最終的代碼:
- (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];
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.