0

Bonjour à tous, j'ai un problème avec mon application ... Dans mon View Controller hp un CollectionView avec une cellule personnalisée qui devrait retourner toutes les photos dans l'appareil photo Rouler la section des photos d'application de mon iphone.Best Way utiliser PHPhotoLibrary pour l'affichage de la caméra Roll image dans UICollectionView avec cellule personnalisée

Maintenant, j'ai fait toutes les étapes pour montrer les photos dans un ImageView dans la cellule personnalisée et jusqu'à maintenant je n'ai aucun problème ... Mon problème est que quand je commence à faire défiler les photos, télécharger des photos est très lent et immédiatement après les accidents app me redonnant cette erreur dans le journal ..

[GatekeeperXPC] Connexion à assetsd a été interrompue ou assetsd est mort 25/02/2017 20: [générique] Création d'une image le format avec un type inconnu est une erreur

Pouvez-vous me dire si j'ai pris la bonne façon de montrer des images dans ma collection? Où est-ce que je me suis trompé? parce que mon application plante?

Merci à tous pour toute aide que vous pouvez me donner

Voici le code i utiliser

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.nameTextField.delegate = self; 
    self.emailTextField.delegate = self; 
    self.passwordTextField.delegate = self; 
    self.collectionView.delegate = self; 
    self.collectionView.dataSource = self; 
    _collectionView.backgroundColor = [UIColor clearColor]; 
} 

-(void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [_nameTextField becomeFirstResponder]; 
    [self queryImage]; 


} 

-(void)queryImage { 
    PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init]; 

    PHFetchResult *collection = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeSmartAlbumUserLibrary options:fetchOptions]; 

    if (collection.firstObject != nil) { 
     _photoFound = YES; 
     _assetCollection = collection.firstObject; 

    } else { 

    } 

    _photoAsset = [PHAsset fetchAssetsInAssetCollection:_assetCollection options:nil]; 
    [_collectionView reloadData]; 
} 

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { 
    return CGSizeMake(80,80); 
} 

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { 

    NSUInteger count = 0; 
    if (_photoAsset != nil) { 
     count = [_photoAsset count]; 
    } 
    return count; 
} 

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *reuseIdentifier = @"imageCell"; 

    UPCameraRollCollectionViewCell* cell = [cv dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath]; 
    cell.backgroundColor = [UIColor redColor]; 


    PHAsset *asset = [_photoAsset objectAtIndex:indexPath.item]; 

PHImageManager *imageManager = [PHImageManager defaultManager]; 
    [imageManager requestImageForAsset:asset targetSize:PHImageManagerMaximumSize contentMode:PHImageContentModeAspectFill options:nil resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) { 

[cell setThumbnailImage:result]; 

}]; 


    return cell; 
} 

Répondre

0

Utilisez PHCachingImageManager.

Apple a un example qui montre exactement comment faire le genre de chose que vous recherchez. Les vues de collection sont précisément le cas d'utilisation prévu.

+0

Pourriez-vous me donner un exemple sur mon code pour mieux comprendre? Je n'ai jamais utilisé PHPhotolibrary est totalement nouveau pour moi – kAiN

+0

C'est comme cette blague, n'est-ce pas, où Dieu dit, "Mec, je vous ai déjà envoyé deux bateaux et un hélicoptère ..." Regardez les docs! Regardez l'exemple! – matt