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 в вашей модели.

Другие вопросы по тегам