6

Я пытаюсь создать простой подборщик фотографий, который имеет два варианта: рецензии и избранные. То, что я делаю, пытается получить все фотографии по creationDate, однако это возвращает образы в неправильном порядке в моем источнике данных. Есть фотографии лет назад в начале источника данных, а фотографии, которые меньше, чем несколько минут, разбросаны по всему миру. Я думаю, что проблема в том, что мне нужно сначала указать основной выбор fetchResult, но я не думаю, что это возможно: Unsupported sort descriptor in fetch options: (creationDate, ascending, compare:PHFetchResult получить все фотографии и отсортировать по дате непоследовательно

Буду признателен за любую предлагаемую помощь. Код:

@property (nonatomic, strong) NSMutableOrderedSet *recentsDataSource; 
@property (nonatomic, strong) NSMutableOrderedSet *favoritesDataSource; 

- (void)setup 
{ 
    PHFetchResult *fetchResult = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum | PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAny options:nil]; 

    for (PHAssetCollection *sub in fetchResult) 
    { 
     PHFetchOptions *fetchOptions = [[PHFetchOptions alloc]init]; 

     fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]]; 

     PHFetchResult *assetsInCollection = [PHAsset fetchAssetsInAssetCollection:sub options:fetchOptions]; 

     for (PHAsset *asset in assetsInCollection) 
     { 
      [self.recentsDataSource addObject:asset]; 

      if (asset.isFavorite) 
      { 
       [self.favoritesDataSource addObject:asset]; 
      } 
     } 
    } 
} 

ответ

5

Я понял это, на мой собственный, вот мое решение:

- (void)setup 
{ 
    self.recentsDataSource = [[NSMutableOrderedSet alloc]init]; 
    self.favoritesDataSource = [[NSMutableOrderedSet alloc]init]; 

    PHFetchResult *assetCollection = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum | PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAny options:nil]; 

    PHFetchResult *favoriteCollection = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeSmartAlbumFavorites options:nil]; 

    for (PHAssetCollection *sub in assetCollection) 
    { 
     PHFetchResult *assetsInCollection = [PHAsset fetchAssetsInAssetCollection:sub options:nil]; 

     for (PHAsset *asset in assetsInCollection) 
     { 
      [self.recentsDataSource addObject:asset]; 
     } 
    } 

    if (self.recentsDataSource.count > 0) 
    { 
     NSArray *array = [self.recentsDataSource sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]]]; 

     self.recentsDataSource = [[NSMutableOrderedSet alloc]initWithArray:array]; 
    } 

    for (PHAssetCollection *sub in favoriteCollection) 
    { 
     PHFetchResult *assetsInCollection = [PHAsset fetchAssetsInAssetCollection:sub options:nil]; 

     for (PHAsset *asset in assetsInCollection) 
     { 
      [self.favoritesDataSource addObject:asset]; 
     } 
    } 

    if (self.favoritesDataSource.count > 0) 
    { 
     NSArray *array = [self.favoritesDataSource sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]]]; 

     self.favoritesDataSource = [[NSMutableOrderedSet alloc]initWithArray:array]; 
    } 
} 
+0

PHFetchResult не соответствует последовательности протокола, поэтому мы не можем использовать его внутри для .. в заявлении. – saiday

Смежные вопросы