在应用程序的PFConfig中存储PFObject指针

时间:2015-06-11 21:09:15

标签: ios parse-platform pfobject

我希望将指向特定对象的指针存储为PFConfig中的对象指针,类似于对象在数据库中如何相互指向。我看到有一种方法可以在Object中创建PFConfig字段,但是当我输入相应的objectID时,它会显示“对象类型的无效值”。 如何在PFConfig

中存储对象链接

2 个答案:

答案 0 :(得分:2)

Object中的PFConfig字段类型看起来只存储JSON对象(使用iOS API转换为NSDictionary),而不是与其他Parse对象的关系。它似乎进行了某种验证,因此即使您输入{"__type":"Pointer", "className":"MyClass", "objectId":"1234xyz"}(有效的JSON),保存也会因__type field is not allowed.错误而无法通过验证。

看起来不能用原生功能来表示抱歉。您可以存储自己的指针样式对象(即,只存储对象ID或{"type": "pointer", "objectId": "ABC123"}样式引用),但您负责管理关系并检索下游对象。

您也可以尝试将要保存的对象转换为JSON表示,但如果您想将其用作真实PFObject,则需要根据数据中的数据重建对象。 PFConfig如果更新该对象的能力对您的配置很重要,那么根据引用加载真实的PFObject可能会更安全。

答案 1 :(得分:1)

根据@ rickerbh的优秀答案扩展我的建议,考虑保存表示所需对象的内容,而不是指向它。这样就可以在查询中找到它,即使对象的objectId发生了变化。

例如,您可以添加名为myConfigParam的配置参数等于{ "class":"MyClass", "uniqueField":"foo" },其中一个或多个uniqueField属性完全描述该对象。然后,可以通过这种方式获取config'd对象,在objective-c ...

- (void)fetchConfigObjectWithCompletion:(void (^)(PFObject *, NSError *))completion {
    [PFConfig getConfigInBackgroundWithBlock:^(PFConfig *config, NSError *error) {
        if (!error) {
            NSString *className = config[@"myConfigParam"][@"class"];
            NSString *uniqueField = config[@"myConfigParam"][@"uniqueField"];
            PFQuery *query = [PFQuery queryWithClassName:className];
            [query whereKey:@"uniqueField" equalTo: uniqueField];
            [query getFirstObjectInBackgroundWithBlock:completion];
        } else {
            completion(nil, error);
        }
    }];
}

由于配置对象呈现为NSDictionary,您甚至可以迭代其键,并在循环中向查询添加equalTo约束,而无需在客户端知道这些键是什么。