簡體   English   中英

iOS bonjour編程-等待響應

[英]iOS bonjour programming - wait for a response

我對與ObjC進行bonjour /聯網非常陌生(盡管在其他領域也很精通!)我需要一些建議-我有一個iOS應用程序,該應用程序可以在商店中的多個iPad上運行。 這些應用程序有時必須共享一些數據,並且互聯網並不總是可用,因此無法選擇Web服務,因此我決定使用bonjour。

我已經設置了Bonjour / NSNetservices,一切正常,ipad基本上形成了一個“臨時網絡”,並在應用啟動時自動連接,但是我正在尋找以下情況的建議:

該應用程序通常在后台共享數據,而無需用戶干預-但是有一個功能,當在一個應用程序上按下按鈕時,應從另一個應用程序遠程返回數據。 然后,當已從另一台設備接收到數據時,UI會更新-但是,如果應該斷開與另一台設備的連接,則數據將永遠無法到達用戶設備,並且不會顯示數據。 我想實施某種形式的timout,但不確定如何執行此操作-任何建議將不勝感激!

流程如下:

在“開發人員1”上按下按鈕>“開發人員1”廣播“開發人員2請發送數據消息”>“開發人員2”以請求的數據響應[此處需要超時]>如果接收到數據,則UI更新/ [如果發生超時,則錯誤顯示消息]

因此,我真的只需要在上一節中指定一個超時時間,而我真的想不出一種方法來實現它。

如果需要,我可以為此發布代碼。

謝謝!

如果您可以手動取消請求,則此解決方案可能會起作用。

我相信您可以在等待后使用簡單的NSTimer取消請求。 我敢肯定這不是最好的解決方案,但它可能會起作用。

這就是我要做的。

在您的類中創建計時器和一個NSInteger (用於存儲計時器值):

NSTimer *timer;
NSInteger timerValue;

timer = [self startTimer];調用此方法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];取消計時器[timer invalidate]; 但請記住,這會“破壞”您的計時器,因此它不會再次觸發事件。

由於您尚未指出您當前如何從其他設備請求數據,因此我不得不做一些假設。

您可以使用帶有requestWithURL:cachePolicy:timeoutInterval:超時的NSURLRequest來使用requestWithURL:cachePolicy:timeoutInterval:

請參閱NSURLRequest文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM