URL のリストについては、ALAssetsLibrary:assetForURL を使用して写真を読み込む必要があり、これを 1 つのメソッド内で行います。このメソッドは非同期で動作しますが、渡された URL のリストを繰り返し処理していないため、ご存知のとおりです。私はこのスニペットを見つけました(これはうまくいくはずです):
- (void)loadImages:(NSArray *)imageUrls loadedImages:(NSArray *)loadedImages callback: (void(^)(NSArray *))callback
{
if (imageUrls == nil || [imageUrls count] == 0) {
callback(loadedImages);
}
else {
NSURL *head = [imageUrls head];
__unsafe_unretained id unretained_self = self;
ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init];
[library assetForURL:head resultBlock:^(ALAsset *asset) {
ALAssetRepresentation *assetRepresentation = asset.defaultRepresentation;
UIImage *image = [UIImage imageWithCGImage:assetRepresentation.fullResolutionImage scale:assetRepresentation.scale orientation:(UIImageOrientation)assetRepresentation.orientation];
[unretained_self loadImages:[imageUrls tail] loadedImages:[loadedImages arrayByAddingObject:image] callback:callback];
} failureBlock:^(NSError *error) {
[unretained_self loadImages:[imageUrls tail] loadedImages:loadedImages callback:callback];
}];
}
}
フォームにメソッド定義を記述する方法 (すべてのコールバックの上)
void loadImages(NSArray *imageUrls, NSArray *loadedImages, ...) ?
このメソッドを別のメソッド (主にコールバック部分) から呼び出すにはどうすればよいですか? コールバックは、呼び出し元のメソッドまたはこれに必要な 3 番目のメソッドに含めることができますか? また、このメソッドをどのように記述する必要がありますか? ここでスニペットを見つけました: http://www.calebmadrigal.com/functional-programming-deal-asynchronicity-objective-c/