iOS bonjour编程 - 等待响应

时间:2013-04-26 10:56:39

标签: ios objective-c xcode bonjour

我很喜欢与ObjC的bonjour /网络(虽然精通其他领域!)我想要一些建议 - 我有一个iOS应用程序,可以在多个iPad上运行,在商店里。应用程序偶尔必须共享一些数据,并且互联网并不总是可用,所以网络服务不是一个选项,因此我决定使用bonjour。

我已经设置了Bonjour / NSNetservices并且一切运行正常,ipads基本上形成了一个'ad-hoc网络'并在应用程序启动时自动连接,但是我正在寻找以下情况的建议:

应用程序通常在后台共享数据,无需任何用户干预 - 但是有一个功能,当在一个应用程序上按下按钮时,应远程从另一个应用程序返回数据。然后,UI在从其他设备接收到数据时进行更新 - 但是,如果连接丢失到其他设备,则数据将永远不会到达用户设备,并且数据将不会显示。我想要实现某种形式的提示,但不确定如何做到这一点 - 任何建议都将不胜感激!

此过程流程如下:

按钮按下'dev 1'> 'dev 1'广播'dev 2请发送数据信息'> 'dev 2'响应请求的数据[此处需要超时]>如果接收到数据,则更新UI / [如果超时触发,则显示错误消息]

所以我真的只需要最后一节的超时 - 我真的想不出实现它的方法。

如果需要,我可以为此发布代码。

谢谢!

2 个答案:

答案 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:

请参阅NSURLRequest documentation