6

Próbuję zbudować prosty próbnik zdjęć, który ma dwie opcje na teraz: Ostatnie i Ulubione. Co robię, próbuję uzyskać wszystkie zdjęcia przez creationDate, ale to daje obrazy w niewłaściwej kolejności w moim źródle danych. Na początku źródła danych znajdują się zdjęcia sprzed lat, a także zdjęcia, które nie są starsze niż kilka minut. Myślę, że problem polega na tym, że najpierw muszę podać główną komendę fetchResult, ale nie wydaje mi się to możliwe: Unsupported sort descriptor in fetch options: (creationDate, ascending, compare:PHFetchResult uzyskać wszystkie zdjęcia i sortować według daty niespójne

Byłbym wdzięczny za każdą oferowaną pomoc. Kod:

@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]; 
      } 
     } 
    } 
} 

Odpowiedz

5

wyobraziłem to na własną rękę, tu jest moje rozwiązanie:

- (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 nie odpowiada sekwencji protokołu, dlatego nie można go używać do wewnątrz .. w oświadczeniu. – saiday

Powiązane problemy