我有一个名为MediaFile的PFObject子类。为了从对服务器的调用中获取我的子类的实例,我已经看到了如何从Parse子类中构造查询,如下所示:
PFQuery *query = [MediaFile query];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { ... }];
但是,我的应用程序中的大多数服务器调用都是自定义的Cloud调用,这些调用返回PFObjects。检索完这些对象后,我想将它们视为MediaFile对象,并对其调用MediaFile类中定义的自定义方法。投射不起作用,因为它实际上并未构造MediaFile对象。为了解决这个问题,我要做的是使用
[MediaFile object]
为每个PFObject构造一个新的MediaFiles,然后使用我写的一种称为loadFromObject:
的方法将所有数据复制到每个PFObject中:[PFCloud callFunctionInBackground:@"func" withParameters:@{} block:^(id objects, NSError *error) {
for (PFObject *object in objects) {
MediaFile *mf = [[MediaFile object] loadFromObject:object];
[array addObject:mf];
}
}];
在MediaFile.m中:
- (MediaFile *) loadFromObject:(PFObject *)object {
NSArray *keys = [object allKeys];
for (NSString *key in keys) {
id obj = [object objectForKey:key];
[self setObject:obj forKey:key];
}
return self;
}
这可行,但是有没有更优雅的方法来解决此问题?
最佳答案
您的自定义类如何定义?
因为它们的子类化机制依赖于键值编码(KVC)。
这是KVC Programming Guide。或者,您可以通过here查看指南。
以下示例应该起作用。
在标题中:
@interface CustomObject : PFObject <PFSubclassing>
@property (nonatomic, strong) NSString *propertyName;
在执行中:
#import <Parse/PFObject+Subclass.h>
#pragma mark - columns of Parse table
@dynamic propertyName;
#pragma mark - regiester parse subclass in runtime
+ (void)load {
@autoreleasepool {
[self registerSubclass];
}
}
#pragma mark - parse cloud table name
+ (NSString *)parseClassName
{
return @"CustomObject"; // table name
}
关于ios - 解析:将PFObject子类与PFCloud调用一起使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20158461/