2013-04-26 2 views
0

ObjC를 사용하여 bonjour/networking에 처음 소개되었습니다. (다른 분야에 정통한 것은 사실이지만!) 여러 가지 조언을 구하고 있습니다. 여러 iPads에서 실행되는 iOS 앱이 있습니다. , 가게 안에서. 응용 프로그램은 때때로 일부 데이터를 공유해야하며 인터넷이 항상 사용 가능한 것은 아니므로 웹 서비스가 옵션이 아니므로 bonjour를 사용하기로 결정했습니다.iOS bonjour 프로그래밍 - 응답 대기

내가 설정 봉쥬르/NSNetservices을 가지고 있고 모든 것이 제대로 작동하고, 아이 패드 그러나 나는 다음과 같은 상황에 대한 조언을 찾고, 기본적으로 '애드혹 네트워크'를 형성하고 앱 시작시 자동으로 연결 :

앱은 일반적으로 사용자 개입없이 백그라운드에서 데이터를 공유하지만 한 앱에서 버튼을 누르면 다른 앱에서 데이터를 원격으로 반환해야하는 기능이 있습니다. 그런 다음 UI는 다른 장치에서 데이터를 수신하면 업데이트됩니다. 그러나 다른 장치로 연결을 잃어 버리면 데이터가 사용자 장치에 도달하지 않으며 데이터가 표시되지 않습니다. 나는 어떤 형태의 타임 아웃을 구현하고 싶지만 어떻게해야할지 확신 할 수 없다 - 어떤 제안이라도 많이 받아 들여질 것이다!

이를위한 프로세스 흐름이 같은 것입니다 : 'DEV 1'>에

버튼을 눌러 'DEV 1'방송 'DEV 2 데이터 메시지를 보내 주시기 바랍니다'> 'DEV 2'요청 된 데이터 [타임 아웃으로 응답 여기에 필수]> 데이터가 수신되면 UI가 업데이트됩니다. [시간 초과가 발생하면 오류 메시지가 표시됩니다]

그래서 마지막 섹션에 시간 제한이 필요합니다. 실제로 구현할 방법을 생각할 수 없습니다.

필요한 경우이 코드를 게시 할 수 있습니다.

감사합니다.

+0

NSURLRequest documentation 우리에게 당신의 장치가 다른 장치의 요청을 경우에 대한 코드를보기 참조

당신은 requestWithURL:cachePolicy:timeoutInterval:

를 사용하여 타임 아웃 NSURLRequest를 사용할 수 있습니다. –

답변

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];으로 타이머를 취소 할 수 있지만 타이머가 "파괴"되므로 이벤트가 다시 발생하지 않습니다.

+0

나는 아니 었 - 나는 충분한 평판이 없습니다! 나는 이런 종류의 해결책을 생각하고있었습니다. 어떤 종류의 사과가 그것을 사용할 지 확신하지 못했지만, 주 스레드 나 아무것도 차단하지 않았다고 가정합니다. 따라서 안전해야합니다! – larrysanchez

+0

@PaulWalton : 당신이 이미 문제를 해결했는지 모르겠다.하지만 당신의 의견에 답하기 위해 애플이 이걸 사용해서 애플 리케이션을 거부 할 이유가 없다. – rdurand

0

다른 기기에서 현재 데이터를 요청하는 방법을 명시하지 않았으므로 몇 가지 가정을해야합니다.

+0

안녕 닉, 미안해. 오늘 첫 번째 코멘트를 놓쳐 버렸습니다. 불행히도 bonjour 네트워킹을위한 자체 프로토콜을 설정 했으므로 오늘 저녁 원래 질문을 편집 할 것입니다. 그래도 답장을 보내 주셔서 감사합니다! – larrysanchez