我有一个方法(我们称之为method1
)向服务器(POST)发出异步请求,以创建具有给定 ID 的 CommunicationLink 对象。在发送请求之前,该方法会检查服务器上是否已存在 CommunicationLink。
我有第二种方法(我们称之为 method2),它获取与给定 CommunicationLink ID 关联的“主题”对象列表。就像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
已经向服务器发送了请求,那么“暂停”的最佳方式是什么?我可以true
在调用之前将布尔值设置为,并在请求完成后将其method1
设置回in ,但我觉得有更好的方法可以做到这一点。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
在同一个线程上调用。
谢谢