photos.appにあるすべての画像を取得してUICollectionViewに表示しようとしています。私は、画像を取得するには、このコードを持っている:ALAssetPrivateは所有ALAssetsLibraryの生存期間を過ぎています
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);
}];
これは、その後のviewDidLoadであると:
+ (ALAssetsLibrary *)defaultAssetsLibrary {
static dispatch_once_t pred = 0;
static ALAssetsLibrary *library = nil;
dispatch_once(&pred, ^{
library = [[ALAssetsLibrary alloc] init];
});
return library;
}
コードのこの作品は、私のUICollectionViewに画像を設定しますアレイを別のコントローラに送信しています。問題は、「所有しているALAssetsLibraryのライフタイムを過ぎてアクセスしようとすると無効な試み」というエラーが発生し、NSLogの配列に結果が「ALAsset-Type:Unknown、URLs:(null)」のようなものです。
私はインターネットを調べて解決策を見つけました。このコード行を追加する必要がありますが、動作しません。コードは次のとおりです。
+ (ALAssetsLibrary *)defaultAssetsLibrary {
static dispatch_once_t pred = 0;
static ALAssetsLibrary *library = nil;
dispatch_once(&pred, ^{
library = [[ALAssetsLibrary alloc] init];
});
return library;
}
誰もが正しい画像URLを表示するのを手伝ってくれますか?
(ALAssetsLibrary *)defaultAssetsLibraryメソッドcharme for me! – kb920