使用Parse.com,每次更新PFRelation时,是否需要重新下载PFObject?

时间:2015-02-22 13:19:04

标签: ios objective-c parse-platform

我正在构建一个简单的消息传递应用程序,我有一个名为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进行查询吗?

1 个答案:

答案 0 :(得分:2)

是的,您可以存储它(或者如果您想要存储关系,虽然这会有点奇怪)并在以后重复使用。

另请注意,如果存储它,您可以使用refreshInBackgroundWithBlock:在将来使用它之前更新该对象(如果它可能已更改内容)。

还有一点需要注意,您可以对关系查询设置限制或要求,以便它不会返回您已有的任何内容(假设您知道对象ID或您拥有的最新项目的创建日期) 。通过这种方式,您可以提高刷新响应的效率。