我正在构建一个简单的消息传递应用程序,我有一个名为messageBank
的类。它包含具有用户名字段和PFRelation receivedMessages
的对象。 receivedMessages
具有指向我的消息类实例的指针。我想知道每次下载消息(即刷新)时如何尽可能高效。我有以下代码:
- (void)populateMessagesArrayWithCompletionHandler:(userCompletionHandler)handler
{
//don't want a strong reference cylce so make it equal to a weak destroyable version
__weak appUser *weakSelf = self;
PFQuery *messageBankQuery = [PFQuery queryWithClassName:@"messageBank"];
[messageBankQuery whereKey:@"username" equalTo:[PFUser currentUser].username];
[messageBankQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (error) {
NSLog(@" %@ %@", error, [error userInfo]);
handler(NO, error,NO,NO); //error
} else {
self.messageBank = objects[0];
PFRelation *messagesRelation = [self.messageBank relationForKey:@"receivedMessages"];
PFQuery *receivedMessagesQuery = [messagesRelation query];
[receivedMessagesQuery orderByAscending:@"createdAt"];
[receivedMessagesQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if(!error){
[weakSelf.messages addObjectsFromArray:objects];//add messages to array
handler(YES, nil,NO,NO);
}
}];
}
}];
}
我的问题是,每次我想刷新消息并检查新消息时,我是否必须再次获取messageBank
对象?我可以将messageBank
对象存储在私有接口中,然后一遍又一遍地对包含在其中的PFRelation进行查询吗?
答案 0 :(得分:2)
是的,您可以存储它(或者如果您想要存储关系,虽然这会有点奇怪)并在以后重复使用。
另请注意,如果存储它,您可以使用refreshInBackgroundWithBlock:
在将来使用它之前更新该对象(如果它可能已更改内容)。
还有一点需要注意,您可以对关系查询设置限制或要求,以便它不会返回您已有的任何内容(假设您知道对象ID或您拥有的最新项目的创建日期) 。通过这种方式,您可以提高刷新响应的效率。