NSNetService を使用して、iPhone アプリと Mac アプリの間の通信をセットアップしようとしています。
iPhoneアプリが検出できるNSNetServiceを公開するようにMacアプリをセットアップするところまで来ましたが、それらの間でデータを送信する方法がわかりません。
私の Mac アプリでは、次のように NSNetService を公開しています。
self.netService = [[NSNetService alloc] initWithDomain:@"" type:@"_sputnik._tcp" name:@"" port:port];
if (self.netService) {
[self.netService scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:@"PrivateMyMacServiceMode"];
[self.netService setDelegate:self];
[self.netService publish];
[self.netService startMonitoring];
NSLog(@"SUCCESS!");
} else {
NSLog(@"FAIL!");
}
すべてが正常に見え、delegate メソッド- (void)netServiceDidPublish:(NSNetService *)sender
(Mac アプリ内) がトリガーされます。
iPhone アプリで のインスタンスを作成するNSNetServiceBrowser
と、1 ~ 2 秒後にdidFindService
デリゲート メソッドがトリガーされます。
- (void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindService:(NSNetService *)aNetService moreComing:(BOOL)moreComing {
TRACE;
NSLog(@"moreComing: %d", moreComing);
self.connectedService = aNetService;
if (!moreComing) {
self.connectedService.delegate = self;
[self.connectedService resolveWithTimeout:30];
}
}
この直後に、次のデリゲート メソッドがトリガーされます- (void)netServiceDidResolveAddress:(NSNetService *)sender
。
ここでは、接続されているかどうかわかりません。接続方法や接続状態が見つかりませんsender
。
だから私は出力ストリームに書き込もうとしました:
[self.connectedService getInputStream:&istream outputStream:&ostream];
NSString *test = @"test";
NSData *data = [test dataUsingEncoding:NSUTF8StringEncoding];
[ostream write:[data bytes] maxLength:[data length]];
また、TXTRecordData を で更新し[sender setTXTRecordData:data];
ます。エラーは発生せず、Mac アプリでは何も起こりません。Mac アプリにはデリゲート メソッドがあり- (void)netService:(NSNetService *)sender didUpdateTXTRecordData:(NSData *)data
ます。
進め方がわかりません。何かが足りないと思いますが、それが Mac アプリにあるのか iPhone アプリにあるのかわかりません。まず、iPhone アプリから Mac アプリに何らかの方法で接続する必要があると思います。Mac アプリでは、接続をリッスンするものを追加します。