我希望将指向特定对象的指针存储为PFConfig
中的对象指针,类似于对象在数据库中如何相互指向。我看到有一种方法可以在Object
中创建PFConfig
字段,但是当我输入相应的objectID
时,它会显示“对象类型的无效值”。
如何在PFConfig
?
答案 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约束,而无需在客户端知道这些键是什么。