I would like to wait this code to be executed before to continue but as these blocks are called assynchronously I don't know how to do???
NSURL *asseturl; NSMutableArray *tmpListAsset = [[NSMutableArray alloc] init]; ALAssetsLibrary *library = [[[ALAssetsLibrary alloc] init] autorelease]; NSMutableArray *objectsToRemove = [[NSMutableArray alloc] init]; for (NSDictionary *dico in assetsList) { asseturl = [NSURL URLWithString:[dico objectForKey:@"assetUrl"]]; NSLog(@"asset url %@", asseturl); // Try to load asset at mediaURL [library assetForURL:asseturl resultBlock:^(ALAsset *asset) { // If asset doesn't exists if (!asset){ [objectsToRemove addObject:dico]; }else{ [tmpListAsset addObject:[asseturl absoluteString]]; NSLog(@"tmpListAsset : %@", tmpListAsset); } } failureBlock:^(NSError *error) { // Type your code here for failure (when user doesn't allow location in your app) }]; }
GCD semaphore approach:
dispatch_semaphore_t sema = dispatch_semaphore_create(0); dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0); for (NSURL *url in self.assetUrls) { dispatch_async(queue, ^{ [library assetForURL:url resultBlock:^(ALAsset *asset) { [self.assets addObject:asset]; dispatch_semaphore_signal(sema); } failureBlock:^(NSError *error) { dispatch_semaphore_signal(sema); }]; }); dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER); } dispatch_release(sema); /* Check out ALAssets */ NSLog(@"%@", self.assets);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With