3

我正在创建一个非常简单的 iOS 应用程序,它将有一个 UIManagedDocument 和一个我想通过 iCloud 同步的核心数据数据库。当我打开应用程序时,我设置了 NSMetaDataQuery 并获取 NSMetadataQueryDidFinishGatheringNotification 和 NSMetadataQueryDidUpdateNotification 的通知。当其中一个进入时,他们会调用一个方法来检查并查看 iCloud 文档目录中有多少文件。如果没有,则创建一个,其persistantStoreOptions在以下方法中设置

- (void)setPersistentStoreOptionsInDocument:(UIManagedDocument *)document
{
    NSMutableDictionary *options = [NSMutableDictionary dictionary];
    [options setObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption];
    [options setObject:[NSNumber numberWithBool:YES] forKey:NSInferMappingModelAutomaticallyOption];

    [options setObject:[document.fileURL lastPathComponent] forKey:NSPersistentStoreUbiquitousContentNameKey];
    [options setObject:[[self iCloudURL] URLByAppendingPathComponent:@"DataLogs"] forKey:NSPersistentStoreUbiquitousContentURLKey];

    document.persistentStoreOptions = options;
}

该文件似乎已成功创建(我可以在 iCloud 文档查看器中看到它列出)但是,稍后当我打开该文件时,无论是重新启动应用程序还是在新设备上打开它,我都遇到了问题。

我创建了一个新的 UIManagedDocument,然后通过从 DocumentMetadata.plist 文件创建一个 NSDictionary 来创建它的 persistentStoreOptions。但是,当我查看字典中的内容时,只有 NSPersistentStoreUbiquitousContentNameKey 在那里。我正在使用的代码是:

NSMetadataItem *item = [self.iCloudQuery resultAtIndex:0];
NSURL *url = [item valueForAttribute:NSMetadataItemURLKey];
url = [self filePackageURLForCloudURL:url]; // gets top level filename
self.accountDatabase = [[UIManagedDocument alloc] initWithFileURL:url];
NSURL *optionsURL = [self.accountDatabase.fileURL URLByAppendingPathComponent:@"DocumentMetadata.plist"];
NSDictionary *options = [NSDictionary dictionaryWithContentsOfURL:optionsURL];
self.accountDatabase.persistentStoreOptions = options;
[self useDocument:self.accountDatabase];

我是否缺少某些步骤来阻止persistentStoreOptions 中的其余项目上传到iCloud?

4

0 回答 0