9
votes

La méthode de Phimagemanager "requestImageDataforAsset" donne un crash à Swift

J'utilise la requestImageDataforAforAforAforAforAforAforAforAforAforAforAforAforAforaFataforaForations de la mémoire de photos particulières dans le rouleau de la caméra. Cela fonctionne bien dans mon appareil, mais certains utilisateurs reçoivent une crash de la base après calculer la taille de la mémoire (trouvée par analyse et rapport d'accident).

Rapport de code et de crash

aide s'il vous plaît.


1 commentaires

@Vizllx Merci de répondre à une idée de l'accident de Crash Signaler ?. C'est arrivé toutes les versions iOS.


3 Réponses :


2
votes

sur quelle version iOS il se bloque, semble fonctionner bien pour moi dans iOS 8.3, si vous utilisez exactement le même processus pour récupérer l'image métadonnées ou la taille de la mémoire: - xxx

i Je suis à la suite de ces liens pour mon kit photo fonctionnement: - phimagemanager et iOS-8-photokit


4 commentaires

Op utilise Swift; cela pourrait faire une différence ici.


Je sais que c'est à Swift, mais dans ce lien ' Github.com/vandadnp/irogrming-Cookbook/bloc / ... ', ils utilisent le même script et cela fonctionne.


@Vizllx que le lien n'existe pas


Lien fixe: Github.com/vandadnp/ios-8-Cookbook/blob/... (Précédent n'a pas fonctionné juste parce que 'symbole à la fin)



2
votes

J'ai eu un problème similaire à celui-ci lorsque les utilisateurs avaient leurs photos stockées dans iCloud à l'aide de la photothèque iCloud. J'ai pu résoudre le problème en faisant appel à l'appel asynchrone. Il ressemble à ce xxx

voici toute la fonction. xxx


0 commentaires

0
votes

Si vous voulez charger toutes les photos que vous avez sur Photos.app et vous ne vouliez pas iCloud. Vous pouvez faire:

Cet exemple fonctionne avec une vue de collection. P>

@interface GalleryViewModel ()

@property (strong, nonatomic) NSMutableArray<PHAsset *> *assets;
@property (strong, nonatomic) PHImageManager *imageManager;
@property (strong, nonatomic) PHImageRequestOptions *requestOptions;

@property (strong, nonatomic) NSMutableArray<UIImage *> *imagesList;

@end

@implementation GalleryViewModel

- (instancetype) initWithContext:(ITXAppContext *)context {
    self = [super initWithContext:context];
    if (self) {
        _assets = [[NSMutableArray alloc] init];
        _imageManager = [PHImageManager defaultManager];
        _requestOptions = [[PHImageRequestOptions alloc] init];
        _imagesList = [[NSMutableArray alloc] init];
    }
    return self;
}

#pragma mark - Public methods

// ==================================================================================
// Public methods

- (void) viewModelDidLoad {
    [self obtainAllPhotos];
}

#pragma mark - Private methods

// ==================================================================================
// Private methods

- (void) obtainAllPhotos {

    self.requestOptions.resizeMode = PHImageRequestOptionsResizeModeExact;
    self.requestOptions.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
    self.requestOptions.synchronous = YES;
    self.requestOptions.networkAccessAllowed = NO;

    PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init];
    fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]];
    PHFetchResult<PHAsset *> *result = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:fetchOptions];

    __weak GalleryViewModel *weakSelf = self;
    [result enumerateObjectsUsingBlock:^(PHAsset * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        [weakSelf.assets addObject:obj];
        if (idx >= ([result count] - 1)) {
            [weakSelf.viewDelegate setupView];
        }
    }];
}

#pragma mark - Get data from object

// ==================================================================================
// Get data from object

- (NSInteger) sizeGallery {

    if (self.assets) {
        return [self.assets count];
    }
    return 0;
}

- (UIImage *) imagesFromList:(NSInteger) index {

    __block UIImage *imageBlock;

    [self.imageManager requestImageForAsset:[self.assets objectAtIndex:index] targetSize:CGSizeMake(200, 200) contentMode:PHImageContentModeAspectFit options:self.requestOptions resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
        if (result) {
            imageBlock = result;
        }
    }];

    return imageBlock;
}

@end


0 commentaires