AFRESTClient pathForEntity с вложенными ресурсами?
Я пытаюсь получить фотографии в альбом, используя URL-адреса вложенных ресурсов, например:
GET http://www.myapi.com/albums/:album_id/photos
Кажется, что самый сухой способ сделать это - переопределить функцию pathForEntity в моем подклассе AFRESTClient. Однако у меня нет доступа к объекту альбома, поэтому я не могу вернуть URL, включая идентификатор_альбома. Как мне переопределить / расширить, чтобы достичь этого? Ниже описано, как я пытался это сделать, обратите внимание на вопросительные знаки, где я не могу указать идентификатор альбома:
- (NSString *)pathForEntity:(NSEntityDescription *)entity {
NSString *path = AFPluralizedString(entity.name);
if ([entity.name isEqualToString:@"Photo"]) {
path = [NSString stringWithFormat:@"albums/%d/photos", ??];
}
return path;
}
Выше стека, у меня есть это в PhotosViewController -viewDidLoad
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = self.currentAlbum.name;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Photo"];
fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"createdAt" ascending:NO]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"album == %@", self.currentAlbum];
fetchRequest.predicate = predicate;
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil];
self.fetchedResultsController.delegate = self;
[self.fetchedResultsController performFetch:nil];
}
Спасибо!
1 ответ
У нас похожая иерархия, и в итоге мы реализуем метод pathForRelationship:forObject: в нашем подклассе AFRESTClient. В вашем случае для альбомов и фотографий, я думаю, что это будет что-то вроде:
- (NSString *)pathForRelationship:(NSRelationshipDescription *)relationship
forObject:(NSManagedObject *)object
{
if ([object isKindOfClass:[Album class]] && [relationship.name isEqualToString:@"photos"]) {
Album *album = (Album*)object;
return [NSString stringWithFormat:@"/albums/%@/photos", album.album_id];
}
return [super pathForRelationship:relationship forObject:object];
}
Это предполагает, что у вас есть настройка отношения toMany в вашей модели.