2015-11-04 6 views
0

Я не могу заставить NSMetadataQueryDidUpdateNotification работать. Застрял в нем несколько дней. В коде ниже есть что-то ненормальное.NSMetadataQueryDidUpdateNotification, не может заставить это работать. Код фрагмента включен

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0ul), ^{ 


    NSString* filePattern = [NSString stringWithFormat:@"*.%@", @"*"]; 

     NSMetadataQuery *aQuery = [[NSMetadataQuery alloc] init]; 
     aQuery.predicate = [NSPredicate predicateWithFormat: @"%K LIKE %@", NSMetadataItemFSNameKey, filePattern]; 

     [aQuery setSearchScopes:@[NSMetadataQueryUbiquitousDataScope]]; 
     [aQuery setValueListAttributes:@[NSMetadataUbiquitousItemPercentDownloadedKey, NSURLUbiquitousItemDownloadingStatusKey,NSURLUbiquitousItemIsDownloadingKey,NSURLUbiquitousItemDownloadRequestedKey]]; 

     _query = aQuery; 

     [[NSNotificationCenter defaultCenter] addObserver:self 
                   selector:@selector(liveUpdate:) 
                    name:NSMetadataQueryDidUpdateNotification 
                    object:aQuery]; 

     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(initalGatherComplete:)                       name:NSMetadataQueryDidFinishGatheringNotification object:aQuery]; 

     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(gatherProgress:)                       name:NSMetadataQueryGatheringProgressNotification object:aQuery]; 

     [aQuery enableUpdates]; 

     dispatch_async(dispatch_get_main_queue(), ^{ 

     [aQuery startQuery]; 


     }); 


     }); 

ответ

0

Надеется, что это помогает вам

Попробуйте заменить этот код уведомления о и запросах метаданных должны быть запущенно на главную очереди, вы сделали это правильно :)

[[NSNotificationCenter defaultCenter] addObserver:self 
selector:@selector(liveUpdate:) 
name:NSMetadataQueryDidUpdateNotification 
object:aQuery]; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
selector:@selector(initalGatherComplete:) 
name:NSMetadataQueryDidFinishGatheringNotification 
object:aQuery]; 

И это пример для обработки уведомления о сборе

- (void)initialGatherComplete:(NSNotification*)notification 
{ 
     //process here. 
} 
+0

Извините, но я не уверен, в чем отличие вашего кода от моего. –

0

решение заключается в том, чтобы в значительной степени ссылаться на блок уведомления как таковой

_notifqueryDidUpdate = [[NSNotificationCenter defaultCenter]addObserverForName:NSMetadataQueryDidUpdateNotification object:aQuery queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) { 

           [self liveUpdate:note]; 

          }];