我很喜欢与ObjC的bonjour /网络(虽然精通其他领域!)我想要一些建议 - 我有一个iOS应用程序,可以在多个iPad上运行,在商店里。应用程序偶尔必须共享一些数据,并且互联网并不总是可用,所以网络服务不是一个选项,因此我决定使用bonjour。
我已经设置了Bonjour / NSNetservices并且一切运行正常,ipads基本上形成了一个'ad-hoc网络'并在应用程序启动时自动连接,但是我正在寻找以下情况的建议:
应用程序通常在后台共享数据,无需任何用户干预 - 但是有一个功能,当在一个应用程序上按下按钮时,应远程从另一个应用程序返回数据。然后,UI在从其他设备接收到数据时进行更新 - 但是,如果连接丢失到其他设备,则数据将永远不会到达用户设备,并且数据将不会显示。我想要实现某种形式的提示,但不确定如何做到这一点 - 任何建议都将不胜感激!
此过程流程如下:
按钮按下'dev 1'> 'dev 1'广播'dev 2请发送数据信息'> 'dev 2'响应请求的数据[此处需要超时]>如果接收到数据,则更新UI / [如果超时触发,则显示错误消息]
所以我真的只需要最后一节的超时 - 我真的想不出实现它的方法。
如果需要,我可以为此发布代码。
谢谢!
答案 0 :(得分:0)
如果您可以手动取消请求,此解决方案可能会有效。
我相信您可以使用简单的NSTimer
在等待后取消请求。我相信这不是最好的解决方案,但它可能会有效。
我将如何做到这一点。
在您的班级中创建您的计时器和NSInteger
(以存储计时器值):
NSTimer *timer;
NSInteger timerValue;
当您触发请求时,请使用timer = [self startTimer];
调用此方法:
- (NSTimer*)startTimer {
timerValue = 30;
return [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerTicked:) userInfo:nil repeats:YES];
}
实施timerTicked:
方法:
- (void)timerTicked:(NSTimer*)timer {
timerValue --;
if (timerValue <= 0) {
// Cancel the request
// Show an alert
}
}
您可以使用[timer invalidate];
取消计时器,但请记住这会“破坏”您的计时器,因此它不会再次触发事件。
答案 1 :(得分:0)
由于您没有说明您目前如何从其他设备请求数据,我不得不做出一些假设。
您可以使用NSURLRequest
requestWithURL:cachePolicy:timeoutInterval: