Bal*_*ick 10 ios alassetslibrary
我试图获取photos.app中的所有图像并将它们显示在UICollectionView中.我有这个代码来检索图像:
ALAssetsLibrary *al = [ViewController defaultAssetsLibrary];
ALAssetsGroupEnumerationResultsBlock groupEnumerAtion = ^(ALAsset *result, NSUInteger index, BOOL *stop){
if (result!=NULL) {
if ([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypePhoto]) {
[imagesGotFromUserLibrary addObject:result];
}
}
};
ALAssetsLibraryGroupsEnumerationResultsBlock
libraryGroupsEnumeration = ^(ALAssetsGroup* group, BOOL* stop){
[group setAssetsFilter:[ALAssetsFilter allPhotos]];
if (group!=nil)
{
[group enumerateAssetsUsingBlock:groupEnumerAtion];
}
else
{
dispatch_async(dispatch_get_global_queue(0, 0), ^{
GalleryCollectionViewController *otherController = [[GalleryCollectionViewController alloc] init];
[otherController receiveImagesWithMutableArray:imagesGotFromUserLibrary];
});
}
};
al = [[ALAssetsLibrary alloc] init];
[al enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos
usingBlock:libraryGroupsEnumeration
failureBlock:^(NSError *error){
NSLog(@"ERROR: %@", error);
}];
Run Code Online (Sandbox Code Playgroud)
这是在viewDidLoad然后:
+ (ALAssetsLibrary *)defaultAssetsLibrary {
static dispatch_once_t pred = 0;
static ALAssetsLibrary *library = nil;
dispatch_once(&pred, ^{
library = [[ALAssetsLibrary alloc] init];
});
return library;
}
Run Code Online (Sandbox Code Playgroud)
这段代码将一个数组发送到另一个控制器,该控制器将图像设置为我的UICollectionView.问题是我收到错误"无法尝试访问其拥有的ALAssetsLibrary的生命周期",如果我尝试NSLog我的数组,结果类似于"ALAsset - Type:Unknown,URL:(null)".
我抬头看了互联网,找到了解决方案.我应该添加这行代码,但它不起作用.代码是:
+ (ALAssetsLibrary *)defaultAssetsLibrary {
static dispatch_once_t pred = 0;
static ALAssetsLibrary *library = nil;
dispatch_once(&pred, ^{
library = [[ALAssetsLibrary alloc] init];
});
return library;
}
Run Code Online (Sandbox Code Playgroud)
任何人都能帮助我获取正确的图像URL显示?
Wai*_*ain 15
解决方案是始终使用相同的库来访问所有类中的资产.您在上面显示的单例解决方案很好 - 只要您的所有类都调用defaultAssetsLibrary它们,并且它们都不会分配/初始化它们自己的类ALAssetsLibrary.
| 归档时间: |
|
| 查看次数: |
5031 次 |
| 最近记录: |