有關我需要使用ALAssetsLibrary:assetForURL加載照片的URL列表,以及此方法中的這一點。 由於此方法工作異步,但它不會遍歷URL的傳遞列表,因爲我們都知道。 我發現這個代碼段(應該工作):如何使用assetForURL加載幾張照片以及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, ...) ?
如何調用該方法從另一個方法(主要是回調部分)? 回調可以在調用方法或第三種方法需要嗎?以及這種方法如何編寫? 我發現這裏的片段:http://www.calebmadrigal.com/functional-programming-deal-asynchronicity-objective-c/
謝謝Ramshad,看起來很有趣。這是否意味着當到達第一行下面的下一行時,數組imageCollection被填充,因此它實際上是一個同步調用? – valley 2013-03-11 07:58:18
另一件事:因爲我不是在類中(我爲Adobe AIR編寫本機擴展,因此我的.m文件只是一組方法),當嘗試使用未聲明的標識符'self'時出現錯誤使用detachNewThreadSelector toTarget:self。我怎樣才能解決這個問題? – valley 2013-03-11 08:09:54
第一行工作在一個單獨的線程上。所以它不會等待方法執行。如果您想等待執行此方法,請刪除NSSthread代碼,然後調用「[self loadImages:imageUrlsCollection];」 – 2013-03-11 09:47:28