繁体   English   中英

如何等待Parse deleteAllInBackground调用完成?

[英]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中。

@synchronized()有什么作用?

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Multithreading/ThreadSafety/ThreadSafety.html

或者,您可以创建某种使用标志的排队系统,因此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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM