![](/img/trans.png)
[英]How to wait for findObjectsInBackgroundWithBlock (in Parse) finish then run the MainThread?
[英]How to wait for a Parse deleteAllInBackground call to finish?
我正在使用Parse的框架构建一个简单的消息传递应用程序。 我有一个名为displayMessages
的方法。 每次电话收到推送时都会调用此方法。
但是,由于该消息正在Parse数据库中运行,因此如果它已经在运行,我不想再次调用它。 我想等到完成再调用它。
我正在使用以下代码:
-(void)receivedPush
{
[self displayMessages];
}
和:
-(void)displayMessages
{
//code here
}
如果调用了收到的推送,我希望它等到displayMessages
完成后再调用它。 在displayMessages
我有一个Parse调用:
[PFObject deleteAllInBackground:toDelete block:^(BOOL succeeded, NSError *error) {
}];
我实际上需要等待的就是deleteAllInBackground。 我该如何解决? 我尝试使用NSOperation队列,这很好地使displayMessages排队,但这不会给我的应用程序所需的结果,因为尽管displayMessages在某个时刻完成执行,但它仍在运行deleteAllInBackground
。
如果我理解正确,那么您的要求是一次只希望一个“实例” displayMessages运行。 您要执行的操作是使displayMessages为“线程安全的”。您应该执行的操作是将代码包装在@synchronized标签内的displayMessages中。
或者,您可以创建某种使用标志的排队系统,因此recievedPush
实际上会将推送添加到队列中,并且会存在某种计时器循环,该循环重复调用显示消息,但仅在处理完成后才触发。
根据评论进行编辑创建一个手动“操作队列”,该队列执行您想要的操作
- (void) methodThatRunsWhenFiredByTimer {
if (self.flag) {
[self displayMessages];
}
}
- (void) displayMessages {
PushData *data = [self dequeueData]; //maybe, not sure how you're accessing the push data
self.flag = NO;
//Code Here
[PFObject deleteAllInBackground:toDelete block:^(BOOL succeeded, NSError *error) {
//Code Here...
self.flag = YES;
}];
}
- (void) recievedPush:(Pushdata) data {
[self enqueuePushData:data];
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.