我正在尝试获取ALAssetsGroup"相机胶卷"当self.assetsGroup
为零时。
我的问题是它是异步的,我试图找出如何进行同步......如果可能的话。
- (void)viewDidLoad
{
[super viewDidLoad];
if (!self.assetsLibrary) {
_assetsLibrary = [[ALAssetsLibrary alloc] init];
}
if (!self.assetsGroups) {
_assetsGroups = [[NSMutableArray alloc] init];
} else {
[self.assetsGroups removeAllObjects];
}
ALAssetsLibraryGroupsEnumerationResultsBlock listGroupBlock = ^(ALAssetsGroup *group, BOOL *stop) {
ALAssetsFilter *onlyPhotosFilter = [ALAssetsFilter allPhotos];
[group setAssetsFilter:onlyPhotosFilter];
if ([group numberOfAssets] > 0)
{
[self.assetsGroups addObject:group];
} else {
[self.collectionView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
}
};
// enumerate only photos
NSUInteger groupTypes = ALAssetsGroupAlbum | ALAssetsGroupEvent | ALAssetsGroupFaces | ALAssetsGroupSavedPhotos;
[self.assetsLibrary enumerateGroupsWithTypes:groupTypes usingBlock:listGroupBlock failureBlock:nil];
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
if (!self.assetsGroup) {
__block ALAssetsGroup *cameraRollGroup = nil;
NSUInteger groupTypes = ALAssetsGroupAlbum | ALAssetsGroupEvent | ALAssetsGroupFaces | ALAssetsGroupSavedPhotos;
[self.assetsLibrary enumerateGroupsWithTypes:groupTypes usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
// Set to Camera Roll
if ([[group valueForProperty:@"ALAssetsGroupPropertyType"] intValue] == ALAssetsGroupSavedPhotos) {
cameraRollGroup = group;
*stop = YES;
return;
}
} failureBlock:^(NSError *error) {
}];
self.assetsGroup = cameraRollGroup;
}
self.title = [self.assetsGroup valueForProperty:ALAssetsGroupPropertyName];
NSLog(@"TITLE %@", self.title); // outputs NULL
if (!self.assets) {
_assets = [[NSMutableArray alloc] init];
} else {
[self.assets removeAllObjects];
}
ALAssetsGroupEnumerationResultsBlock assetsEnumerationBock = ^(ALAsset *result, NSUInteger index, BOOL *stop) {
if (result) {
[self.assets addObject:result];
} else {
[self.collectionView reloadData];
}
};
ALAssetsFilter *onlyPhotosFilter = [ALAssetsFilter allPhotos];
[self.assetsGroup setAssetsFilter:onlyPhotosFilter];
[self.assetsGroup enumerateAssetsUsingBlock:assetsEnumerationBock];
}
答案 0 :(得分:0)
我最终做的是在展示uiviewcollection控制器之前加载组。
- (void)presentAlbumCollection
{
ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
NSUInteger groupTypes = ALAssetsGroupSavedPhotos;
[assetsLibrary enumerateGroupsWithTypes:groupTypes usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if ([[group valueForProperty:@"ALAssetsGroupPropertyType"] intValue] == ALAssetsGroupSavedPhotos) {
AlbumCollectionViewController *albumCollectionViewController = [[AlbumCollectionViewController alloc] initWithAssetsLibrary:assetsLibrary];
albumCollectionViewController.assetsGroup = group;
[self.view.window.rootViewController presentViewController:albumCollectionViewController animated:YES completion:nil];
}
} failureBlock:^(NSError *error) {
NSLog(@"NOT FOUND!");
}];
}