주어진 ID로 CommunicationLink 객체를 만들기 위해 서버 (POST)에 대한 비동기 요청을하는 메소드가 있습니다 (method1
). 요청을 보내기 전에 메서드는 CommunicationLink가 이미 서버에 있는지 확인합니다.계속하기 전에 부울 값이 변경 될 때까지 대기
주어진 CommunicationLink ID와 관련된 "Topic"개체의 목록을 가져 오는 두 번째 방법 (method2라고 부름)이 있습니다. method1
처럼 method2
은 CommunicationLink가 이미 서버에 있는지 확인하고 그렇지 않은 경우 서버에 비동기 요청을 보내서 다시 만듭니다.
내가 가진 문제는 내가 내 응용 프로그램을 시작할 때, method1
및 method2
이 하나씩라는 것을, 그래서 이런 식으로 뭔가와 끝까지 : 서버에 따라서
method1 checks if CommunicationLink exists ---> NO
method1 sends a request to create CommunicationLink (async call)
method2 checks if CommunicationLink exist ---> NO because the previous call is not done yet
method2 sends a request to create CommunicationLink
method1 done
method2 done
, 나는 결국 동일한 ID에 대해 2 개의 CommunicationLink가 있습니다 (서버 측에서 무슨 일이 일어나는지 제어 할 수 없음)
method1
이 이미 서버에 요청을 보낸 경우 method2
을 "일시 중지"하는 가장 좋은 방법은 무엇입니까? method1
에있는 호출 전에 true
에 부울을 설정하고 요청이 완료되면 false
으로 다시 설정하고 while (!myValue);
을 method2
에 넣을 수 있지만 더 좋은 방법이 있다고 생각합니다.
편집
정적 라이브러리의 일부가 내가 푸시 알림을 처리하기 위해 일하고 있어요 경우이 코드. 나는 "라이브러리를 사용하는 테스트 응용 프로그램 작업도 해요. method1
이
- (void)sendProviderDeviceToken:(NSData *)deviceToken contextUUID:(NSString *)contextUUID sourceUUID:(NSString *)sourceUUID topicUUID:(NSString *)topicUUID language:(NSString *)language;
방법 내 루트 뷰의 viewDidLoad
방법 항목에라고 - (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken;
및 method2
에서 호출
- (void)createCommunicationLinkWithSuccessHandler:(void (^)(NSNumber *))successHandler errorHandler:(void (^)(NSError *))errorHandler;
2 방법 2
- (void)retrieveSubscriptionForContext:(NSString *)contextUUID notificationTopic:(NSString *)notificationTopic completion:(void (^)(NSDictionary *))completion;
내 라이브러리에서이 사례를 직접 처리하고 테스트 응용 프로그램을 수정할 필요가 없습니다. method1
및 method2
은 같은 스레드에서 호출됩니다.
감사
가장 좋은 방법은 뮤텍스를 사용하는 것입니다 물론
나는 method1과 method2의 서명과 세부 사항을 가지고 내 게시물을 편집했습니다. –
매우 유용합니다. 제발 내 편집을 참조하십시오 ... – sergio
고마워요. 당신이하는 제안은 정확하게 내가하고 싶었던 것입니다. 유일한 문제는 다음과 같습니다. "응답을 기다리지 않고 method2를 실행하십시오." 응답을 기다리는 경우 method2에 응답을 얻을 때까지 "대기"한 다음 지시 사항을 실행하는 방법이 필요합니다. 그리고 내 라이브러리에서 완료해야합니다 내 애플 –