iOS bonjour编程 - 等待回复
我对bonjour /与ObjC网络相当陌生(虽然熟悉其他领域!)我在寻求一些建议 - 我有一个iOS应用程序可以在多个iPad上运行,在一家商店里。这些应用程序偶尔需要共享一些数据,而互联网并不总是可用,所以web服务不是一种选择,因此我决定使用bonjour。iOS bonjour编程 - 等待回复
我已经安装了卓悦/ NSNetservices,一切都正常,ipad公司基本形成了“ad-hoc网络”,并在应用程序启动自动连接,但是我正在寻找咨询以下情况:
该应用程序通常在后台共享数据,而无需任何用户干预 - 但是有一个功能,即在一个应用程序上按下某个按钮时,应该从另一个应用程序远程返回数据。然后,用户界面会更新何时从其他设备接收到数据 - 但是如果连接应该丢失到其他设备,数据将永远不会到达用户设备,并且数据将不会显示。我想要实现一些形式的timout,但不确定如何做到这一点 - 任何建议将不胜感激!
这种情况的处理流程是这样的:
按钮按下“dev的1”>“dev的1”广播“dev的2请发送数据消息”>“dev的2”与请求的数据[超时响应这里需要]>如果接收到数据,UI会更新/ [如果超时激活,显示错误消息]
所以我真的只是需要最后一节超时 - 我真的无法想到实现它的方式。
如果需要,我可以发布代码。
谢谢!
如果您有可能手动取消请求,则此解决方案可能会有效。
我相信你可以使用一个简单的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];
取消定时器,但请记住这会“毁掉”您的计时器,因此它不会再次触发事件。
不是我 - 我没有足够的声望!我正在考虑这种解决方案 - 我不确定苹果会采取什么样的观点,但我认为它不会阻塞主线或任何东西,所以应该是安全的! – larrysanchez 2013-04-26 15:13:15
@PaulWalton:我不知道你是否已经解决了你的问题,但是为了回答你的评论,我没有看到苹果为什么拒绝使用此应用程序的任何原因。 – rdurand 2013-04-30 07:45:15
由于您尚未指出您目前是如何从您的其他设备请求数据的,因此我必须做出一些假设。
您可以使用NSURLRequest
使用requestWithURL:cachePolicy:timeoutInterval:
嗨,尼克,对不起,离开我的Mac今天又错过了你的第一条评论 - 不幸的是我已经为bonjour网络建立了自己的协议,我今天晚上将编辑我原来的问题。谢谢你的回复! – larrysanchez 2013-04-26 15:05:11
向我们展示你因为你的设备,使其他设备的请求代码。 – 2013-04-26 11:58:27