2013-09-11 5 views
1

Если бы в моей базе данных в течение нескольких дней хранился URL-адрес фотоизображения в Фотобиблиотеке (ALAsset) в моей базе данных, как я узнаю, что эта фотография все еще существует в библиотеке фотографий по NSURL?Как узнать, существует ли NSURL библиотеки ALASset в библиотеке активов?

Я попытался это, но он не работает:

// Have already obtained the asset object from ALAssetsLibrary 
NSURL *assetURL = [[(ALAsset*)asset defaultRepresentation] url]; 
BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath: [assetURL absoluteString]]; 
NSLog(@"exists: %d (%@)", exists, [assetURL absoluteString]); 

>> exists: 0 (assets-library://asset/asset.PNG?id=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&ext=PNG) 
+0

NSURL * myURL = [NSURL URLWithString: @ "url идет здесь"] NSString * path = [myURL absoluteString]; – Tendulkar

ответ

0

Попробуйте это как ваше требование. Проверьте его

dispatch_group_t group = dispatch_group_create(); 
    dispatch_group_enter(group); 
    __block BOOL flag=YES; 
    ALAssetsLibrary* assetslibrary = [[ALAssetsLibrary alloc] init]; 
    [assetslibrary assetForURL:path resultBlock:^(ALAsset *asset) { 
     if (asset==nil) 
     { 
      flag=NO; 
     } 
     else 
     { 
      flag=YES; 
     } 
      dispatch_group_leave(group); 
     } failureBlock:^(NSError *error){ 
       NSLog(@"operation was not successfull!"); 
       dispatch_group_leave(group); 
    }]; 
    dispatch_group_wait(group, DISPATCH_TIME_FOREVER); 
    dispatch_release(group); 
+0

Я сделал эту реализацию, но она застряла в строке 'dispatch_group_wait (group, DISPATCH_TIME_FOREVER); '. Этот метод может быть вызван, когда другой объект ALAssetsLibrary занят. Я думаю, для этого может понадобиться другой поток или очередь отправки. Правильно? –

+1

Я нашел [ответ с использованием семафора GCD] (http://stackoverflow.com/questions/7234445/wait-for-assetforurl-blocks-to-be-completed), который решает мою проблему. –

+0

Хороший вопрос и усилия также. –