NSMutableArray, возвращающий nil после добавления UIImage в массив
Я хочу получить последнюю фотографию, сделанную в photoLibrary, и добавить ее в массив, который будет использоваться в UIActivivtyViewController. Когда представлен UIActivityViewController, изображение не отображается, и кажется, что UIImage никогда не добавлялся в массив.
Вот что у меня есть,
NSMutableArray *items = [[NSMutableArray alloc]init];
[items addObject:@"someText"];
PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init];
fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]];
PHFetchResult *fetchResult = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:fetchOptions];
PHAsset *lastAsset = [fetchResult lastObject];
__block UIImage *shareImage;
PHImageRequestOptions* options = [[PHImageRequestOptions alloc]init];
options.resizeMode = PHImageRequestOptionsResizeModeExact;
options.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
options.version = PHImageRequestOptionsVersionUnadjusted;
options.synchronous = YES;
[[PHImageManager defaultManager] requestImageForAsset:lastAsset
targetSize:PHImageManagerMaximumSize
contentMode:PHImageContentModeDefault
options:PHImageRequestOptionsVersionCurrent
resultHandler:^(UIImage *result, NSDictionary *info) {
dispatch_async(dispatch_get_main_queue(), ^{
shareImage = result;
[items addObject:shareImage]; });
}];
NSMutableArray *activityItems = [NSMutableArray arrayWithArray:items];
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
[self presentViewController:activityViewController animated:YES completion:nil];
Любая помощь будет оценена. Я новичок в разработке для iOS и программирую все вместе, и мне было очень тяжело с этим.
Спасибо
1 ответ
Решение
UIImage
на самом деле добавляется к вашему items
массив. в то время, когда вы создаете activityItems
массив и представить UIActivityViewController
блок, который добавляет UIImage
может быть не закончен, хотя. если вы добавили логику представления в блок (после добавления изображения в массив), это должно работать!
- (void)yourMethod {
NSMutableArray *items = [[NSMutableArray alloc] init];
[items addObject:@"someText"];
PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init];
fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]];
PHFetchResult *fetchResult = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:fetchOptions];
PHAsset *lastAsset = [fetchResult lastObject];
PHImageRequestOptions *options = [[PHImageRequestOptions alloc]init];
options.resizeMode = PHImageRequestOptionsResizeModeExact;
options.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
options.version = PHImageRequestOptionsVersionUnadjusted;
options.synchronous = YES;
[[PHImageManager defaultManager] requestImageForAsset:lastAsset
targetSize:PHImageManagerMaximumSize
contentMode:PHImageContentModeDefault
options:PHImageRequestOptionsVersionCurrent
resultHandler:^(UIImage *result, NSDictionary *info) {
dispatch_async(dispatch_get_main_queue(), ^{
[items addObject:result];
[self presentActivityControllerWithItems:items];
});
}];
}
- (void)presentActivityControllerWithItems:(NSArray *)items {
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil];
[self presentViewController:activityViewController animated:YES completion:nil];
}