3

iCloud を無効にすると、NSMetadataQuery が機能しないようです。有効な検索 URL を入力しましたが、完了として登録されません。

//Check for iCloud
NSURL *ubiq = [[NSFileManager defaultManager] 
               URLForUbiquityContainerIdentifier:nil];
if (ubiq) {
    NSLog(@"iCloud access at %@", ubiq);
    self.query = [[[NSMetadataQuery alloc] init] autorelease];
    [self.query setSearchScopes:[NSArray arrayWithObject:
                                 NSMetadataQueryUbiquitousDataScope]];
    _isiCloudEnabled = YES;
} else {
    NSLog(@"No iCloud access");
    //Get the doc directory
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    self.query = [[[NSMetadataQuery alloc] init] autorelease];
    [self.query setSearchScopes:[NSArray arrayWithObjects:
                                 [NSURL fileURLWithPath:path],nil]];
    _isiCloudEnabled = NO;
}

NSPredicate *pred = [NSPredicate predicateWithFormat: 
                     @"%K like %@", NSMetadataItemFSNameKey, @"*.adoc"];
[self.query setPredicate:pred];
[[NSNotificationCenter defaultCenter] 
 addObserver:self 
 selector:@selector(queryDidFinishGathering:) 
 name:NSMetadataQueryDidFinishGatheringNotification 
 object:self.query];

[self.query startQuery];

queryDidFinishGathering: 呼び出されることはありません。iCloud が有効になっている場合、常に呼び出されます。理由はありますか?

4

2 に答える 2

0

iOS5の時点では、の検索範囲はユビキタスなもの(および)NSMetadataQueryにしか設定できないため、iCloudを無効にして使用するのは役に立たないでしょう。NSMetadataQueryUbiquitousDocumentsScopeNSMetadataQueryUbiquitousDataScope

おそらく理由queryDidFinishGatheringが呼び出されないのはクエリスコープが原因であると推測しているので、ローカルディレクトリはまだサポートされていません(ただし、疑わしいことに例外やエラーをスローしていません:))

私の意見では、NSMetadataQueryクラスはiOSに完全に移植されていません。OSXでは、より多くのスコープを設定でき、より多くの種類をNSPredicate設定でき、NSSortDescriptors動作します。

于 2012-05-09T11:36:10.660 に答える