saveInBackgroundWithBlock在完成工作时不调用该块

时间:2015-05-12 21:46:25

标签: parse-platform

我正在尝试使用Obj-C在iOS中进行简单的聊天,当我按下“发送”按钮时,我将对象保存到Parse并检索所有消息。

当它成功时,我会检索所有消息,因此也应该检索最后一个(我的),但最后一个永远不会被调用。我该怎么办?

这是我的代码:

NSMutableArray *messagesArray;

- (IBAction)sendButtonTapped:(id)sender {

    self.sendButton.enabled = false;
    self.textField.enabled = false;
    PFObject *objectChat = [PFObject objectWithClassName: @"ChatClass"];

    objectChat[@"text"] = self.textField.text;

    [objectChat saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {


        self.sendButton.enabled = true;
        self.textField.enabled = true;

        if (succeeded) {
            self.textField.text = @"";

            [self retrieveMessages];

            NSLog(@"success!");
        } else {
            NSLog(error.description);
        }

    }];


}

-(void) retrieveMessages {
    NSDate *now = [NSDate date];

    PFQuery *query = [PFQuery queryWithClassName:@"ChatClass"];
    [query whereKey:@"createdAt" lessThanOrEqualTo:now];
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {


        if (error == nil) {

            messagesArray = [[NSMutableArray alloc] init];

            for (int i = 0; i < [objects count]; i++) {

                [messagesArray addObject:[[objects objectAtIndex:i] objectForKey:@"text"]];
            }

            runOnMainQueueWithoutDeadlocking(^{

                [self.messageTableView reloadData];

            });

        }

    }];
}

void runOnMainQueueWithoutDeadlocking(void (^block)(void))
{
    if ([NSThread isMainThread])
    {
        block();
    }
    else
    {
        dispatch_async(dispatch_get_main_queue(), block);
    }
}

非常感谢您提前。 问候。

1 个答案:

答案 0 :(得分:2)

也许与解析服务器有足够的时钟差异,时间限定错过了刚刚创建的对象。删除该行应该可以解决问题。