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

Storing a PFObject pointer in an app's PFConfig

我想将指向特定对象的指针作为对象指针存储在 PFConfig 中,类似于对象在数据库中如何相互指向。我看到有一种方法可以在 PFConfig 中创建一个 Object 字段,但是当我输入相应的 objectID 时,它显示 "invalid value for Object Type"。 如何在 PFConfig?

中存储对象链接

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

抱歉,这看起来无法通过本机功能完成。您可以存储自己的指针样式对象(即仅存储对象 ID 或 {"type": "pointer", "objectId": "ABC123"} 样式引用),但您需要负责管理关系并检索下游对象。

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

扩展我在@rickerbh 的出色回答下的建议,考虑保存一些指示 所需对象的东西,而不是指向它。这样,即使对象的 objectId 发生变化,也可以在查询中找到它。

例如,您可以添加一个名为 myConfigParam 等于 { "class":"MyClass", "uniqueField":"foo" } 的配置参数,其中一个或多个 uniqueField 属性完整地描述了对象。然后,可以通过这种方式获取配置对象,在 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 约束,而无需在客户端知道这些键是什么。