2
私はIOSにはかなり新しいです。私はviewDidLoad
のデバイス上のすべての写真を取得したいです。コード内でNSLog(@"%d", photos.count)
と呼んだ後では、ブロックは常に次のように実行されます。そのようなケースを扱うには? ALAssetsLibrary documentation状態としてブロックの実行は常に遅くなります
__block NSMutableArray* photos = [[[NSMutableArray alloc] init] retain];
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
void (^assertsEnumerator)(ALAsset *, NSUInteger , BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop)
{
if(result)
{
NSLog(@"Assert name : %@", [result valueForProperty:ALAssetPropertyURLs]);
[photos addObject:[UIImage imageWithCGImage:[result aspectRatioThumbnail]]];
}
};
void (^groupEnumerator)(ALAssetsGroup*, BOOL*) = ^(ALAssetsGroup *group, BOOL *stop) {
if(group != nil) {
NSLog(@"Adding group %@", [group valueForProperty:ALAssetsGroupPropertyName]);
[group enumerateAssetsUsingBlock: assertsEnumerator];
}
};
[library enumerateGroupsWithTypes: ALAssetsGroupSavedPhotos
usingBlock:groupEnumerator
failureBlock:^(NSError * err) {NSLog(@"Erorr: %@", [err localizedDescription]);}];
[library release];
NSLog(@"%d", photos.count);
[photos release];
ありがとう、ayoy!enumerationBlockで値を返す必要がある場合はどうすればよいですか?デリゲートの今後のコールバック関数でその価値が必要な場合、どうすればいいですか? – Jin
あなたは単にそれを行うことはできません。あなたは何とかそれを回避しなければなりません。例えば、 [この質問とトップの回答](http://stackoverflow.com/questions/9474018/returning-uiimage-from-block) – ayoy