首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSMetadataQuery没有完成收集(没有通知)

NSMetadataQuery没有完成收集(没有通知)
EN

Stack Overflow用户
提问于 2011-11-29 14:49:00
回答 4查看 3.7K关注 0票数 5

我正在为我的应用程序做一个备份管理器(通过iCloud)。我做了一些测试,基本原理奏效了。但几天后它就停止了。如果备份文件存在,我将使用NSMetadataQuery进行搜索。我的备份文件名为Backup29112011154133.xml,其中数字表示备份的日期(格式化为ddMMyyyyHHmmss)。我在-viewDidAppear里查过了

代码语言:javascript
复制
- (void)viewDidAppear:(BOOL)animated {
    [self checkForRemoteFile];
}

- (void)checkForRemoteFile {
    NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
    if (ubiq) {
        NSMetadataQuery *query = [[NSMetadataQuery alloc] init];
        [query setSearchScopes:[NSArray arrayWithObject:NSMetadataQueryUbiquitousDocumentsScope]];
        NSPredicate *pred = [NSPredicate predicateWithFormat:@"%K like 'Backup*'",NSMetadataItemFSNameKey];
        [query setPredicate:pred];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(queryDidFinishGathering:) name:NSMetadataQueryDidFinishGatheringNotification object:query];
        [query startQuery];
    } else {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"iCloud is unavailable at the moment" message:nil delegate:self cancelButtonTitle:@"Close" otherButtonTitles:nil];
        [alert setTag:TAG_ALERT_NOICLOUD];
        [alert show];
    }
}

- (void)queryDidFinishGathering:(NSNotification *)notif {
    NSMetadataQuery *query = [notif object];
    [query disableUpdates];
    [query stopQuery];
    [self loadRemoteFile:query];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:NSMetadataQueryDidFinishGatheringNotification object:query];
}

- (void)loadRemoteFile:(NSMetadataQuery *)query {
    if ([query resultCount] == 1) {
        canRestore = YES;
        NSMetadataItem *item = [query resultAtIndex:0];
        // parse the backup file
        [self.tableView reloadData];
    } else {
        canRestore = NO;
        modifDate = @"never";
        backupInfoLoaded = YES;
        [self.tableView reloadData];
    }
}

问题是- (void)queryDidFinishGathering:(NSNotification *)notif从未被执行过。我把破碎品和NSLogs离子放在那里,但什么也没发生。

我还试图检查其他通知,例如“查询确实开始收集”和“查询过程”。只有“查询启动”通知才会发布。

我也有AppID与iCloud注册和权利文件附加。

你能帮我弄清楚发生了什么事吗?也许我漏掉了什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-12-10 13:10:35

通过为ivar创建NSMetadataQuery来修正。

我不知道为什么应用程序没有NSMetadataquery ivar就不能读取数据。

票数 9
EN

Stack Overflow用户

发布于 2011-12-01 18:21:53

首先,如果NSMetadataQuery不是从MaintThread调用的,那么startQuery就不能工作。谓词也有可能对每条路径都失败。下面的代码适用于我。

代码语言:javascript
复制
NSURL *mobileDocumentsDirectoryURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
...
query.predicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"%%K like \"%@*\"", [mobileDocumentsDirectoryURL path]], NSMetadataItemPathKey];
[query startQuery];
票数 17
EN

Stack Overflow用户

发布于 2011-11-29 16:11:51

不幸的是,iCloud和使用NSMetaDataQuery存在许多问题。老实说,到目前为止,所有与iCloud相关的问题最好的来源是苹果开发者论坛。今天苹果发布了iOS 5.1测试版,的发布说明NSMetaDataQuery没有正常运行。非常令人沮丧的是,iCloud仍然没有正常工作,但遗憾的是,我们无能为力。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8312749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档