アプリのバックアップマネージャーを作成しています(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];
}
}
問題は、- (void)queryDidFinishGathering:(NSNotification *)notif
決して実行されないことです。そこにブレークポイントと NSLogs イオンを配置しましたが、何も起こりませんでした。
「クエリが収集を開始しました」や「クエリプロセス」など、他の通知も確認しようとしました。「クエリが開始されました」通知のみが投稿されます。
また、iCloud が登録された AppID と権利ファイルが添付されています。
何が起こっているのか、私を助けてくれますか? 多分私は何かを逃しましたか?