aka*_*kyy 5 iphone ios5 icloud nsmetadataquery
我正在为我的应用程序(通过iCloud)制作备份管理器.我做了一些测试,基础工作正常.但几天后它停了下来.我正在NSMetadataQuery用于搜索是否存在备份文件.我的备份文件被命名为例如Backup29112011154133.xml其中数字代表备份日期(格式为ddMMyyyyHHmmss).我检查一下-viewDidAppear:
- (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];
}
}
Run Code Online (Sandbox Code Playgroud)
问题是- (void)queryDidFinishGathering:(NSNotification *)notif永远不会执行.我把breakpints和NSLogs放在那里但没有任何事情发生.
我还尝试检查其他通知,例如"查询确实开始收集"和"查询过程".仅发布'query did start'通知.
我还附带了iCloud注册和授权文件的AppID.
你能帮我解决一下发生的事吗?也许我错过了什么?
小智 17
首先,如果不是从MaintThread调用startQuery,则NSMetadataQuery不起作用.每个路径都有可能出现谓词失败.以下代码适合我.
NSURL *mobileDocumentsDirectoryURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
...
query.predicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"%%K like \"%@*\"", [mobileDocumentsDirectoryURL path]], NSMetadataItemPathKey];
[query startQuery];
Run Code Online (Sandbox Code Playgroud)
ivar来固定NSMetadataQuery.我不知道为什么没有NSMetadataquery ivar,应用程序无法读取数据.
| 归档时间: |
|
| 查看次数: |
3444 次 |
| 最近记录: |