У меня есть подкласс PFObject под названием MediaFile. Чтобы вернуть экземпляры моего подкласса из вызовов на сервер, я видел, как вы можете создавать запросы из подклассов Parse следующим образом:
PFQuery *query = [MediaFile query];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { ... }];
Однако большинство вызовов сервера в моем приложении — это пользовательские вызовы Cloud, которые возвращают PFObjects. Как только я извлек эти объекты, я хочу рассматривать их как объекты MediaFile и вызывать для них пользовательские методы, определенные в классе MediaFile. Кастинг не работает, потому что он фактически не создает объект MediaFile. Что я сделал, чтобы решить эту проблему, так это создал новые MediaFiles для каждого PFObject, который я возвращаю, используя [MediaFile object]
, а затем скопировал все данные в каждый, используя метод, который я написал под названием loadFromObject:
:
[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;
}
Это работает, но есть ли более элегантный способ решения этой проблемы?