我正在尝试使用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);
}
}
非常感谢您提前。 问候。
答案 0 :(得分:2)
也许与解析服务器有足够的时钟差异,时间限定错过了刚刚创建的对象。删除该行应该可以解决问题。