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: メソッドの内部で、発行前に TXT レコードをアタッチしたにもかかわらず、着信 NSNetService に空の TXT レコードがあることを確認しましたが、しばらくして netService:didUpdateTXTRecordData: 呼び出しを受け取りました。

于 2013-09-17T19:01:23.133 に答える