在应用程序的 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 约束,而无需在客户端知道这些键是什么。
我想将指向特定对象的指针作为对象指针存储在 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 约束,而无需在客户端知道这些键是什么。