Ich benutze diesen Code, um Fotos aus dem Album mit Fotorahmen, abrufen Ich habe erfolgreich die PHAssets abgerufen und in Array, aber ich bin nicht in der Lage, es in Bilder zu konvertieren, Es stürzt während des Prozesses ab. Anfordern von Bild von PHAssets Array Ursachen in Speicher Ausnahme
Hier ist mein Code,
-(void)retrieveAllPhotoSetWithCompletionCallback:(void(^ __nonnull)(NSMutableArray * __nullable asset ,NSMutableArray * __nullable imageArray , BOOL complete))completionCallback{
self.requestOptions = [[PHImageRequestOptions alloc] init];
self.requestOptions.resizeMode = PHImageRequestOptionsResizeModeExact;
self.requestOptions.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
self.requestOptions.synchronous = YES;
NSMutableArray *assetsArray = [NSMutableArray new];
PHFetchResult *fetchResult = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:nil];
[fetchResult enumerateObjectsUsingBlock:^(PHAsset *_Nonnull asset, NSUInteger idx, BOOL * _Nonnull stop) {
[assetsArray addObject:asset];
}];
PHImageManager *manager = [PHImageManager defaultManager];
NSMutableArray *images = [NSMutableArray arrayWithCapacity:[assetsArray count]];
// assets contains PHAsset objects.
// __block UIImage *ima;
int i = 0;
for(PHAsset *asset in assetsArray) {
// This autorelease pool seems good (a1)
@autoreleasepool {
[manager requestImageForAsset:asset
targetSize:PHImageManagerMaximumSize
contentMode:PHImageContentModeDefault
options:self.requestOptions
resultHandler:^(UIImage *image, NSDictionary *info) {
dispatch_async(dispatch_get_main_queue(), ^{
//you can add autorelease pool here as well (a2)
@autoreleasepool {
//assetCount++;
NSLog(@"started requesting image %i", i);
NSError *error = [info objectForKey:PHImageErrorKey];
if (error)
NSLog(@"Image request error: %@",error);
else {
NSString *imagePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0] stringByAppendingPathComponent:[NSString stringWithFormat:@"%i.png",i]];
NSData *imageData = UIImagePNGRepresentation(image);
if(imageData) {
[imageData writeToFile:imagePath atomically:YES];
[images addObject:imagePath];
}
else {
NSLog(@"Couldn't write image data to file.");
}
NSLog(@"finished requesting image %i", i);
}
} //a2 ends here
});
}];
i++;
} // a1 ends here
}
completionCallback(assetsArray,images,YES);
}