method1
サーバー(POST)に非同期要求を行って、指定されたIDでCommunicationLinkオブジェクトを作成するメソッド(呼び出します)があります。このメソッドは、要求を送信する前に、CommunicationLinkがサーバー上にすでに存在するかどうかを確認します。
特定のCommunicationLinkIDに関連付けられた「トピック」オブジェクトのリストをフェッチする2番目のメソッド(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つのCommunicationLinksになります(サーバー側で何が起こっているかを制御することはできません)
すでにサーバーにリクエストを送信しているmethod2
場合、「一時停止」するための最良の方法は何でしょうか。コールインの前にmethod1
ブール値を設定し、リクエストが完了してinを取得したら、ブール値に戻すことができますが、これを行うにはもっと良い方法があると感じています。true
method1
false
while (!myValue);
method2
編集
このコードは、プッシュ通知を処理するために作業している静的ライブラリの一部である場合。ライブラリを使用するテストアプリにも取り組んでいます。method1
が呼び出され- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken;
、method2
ルートビューで呼び出されます。viewDidLoad
方法1
- (void)sendProviderDeviceToken:(NSData *)deviceToken contextUUID:(NSString *)contextUUID sourceUUID:(NSString *)sourceUUID topicUUID:(NSString *)topicUUID language:(NSString *)language;
CommLinkを作成するメソッド
- (void)createCommunicationLinkWithSuccessHandler:(void (^)(NSNumber *))successHandler errorHandler:(void (^)(NSError *))errorHandler;
方法2
- (void)retrieveSubscriptionForContext:(NSString *)contextUUID notificationTopic:(NSString *)notificationTopic completion:(void (^)(NSDictionary *))completion;
このケースをライブラリで直接処理できるようにしたいので、テストアプリを変更する必要はありません。method1
とmethod2
同じスレッドで呼び出されます。
ありがとう