gpt4 book ai didi

ios - Core Data 自定义元数据不为 iCloud 存储保存

转载 作者:可可西里 更新时间:2023-11-01 06:15:27 26 4
gpt4 key购买 nike

我正在尝试将一些自定义元数据保存到支持 iCloud 的 Core Data SQLite 存储中。该文档似乎说除了它生成的元数据之外,我应该能够设置我自己的自定义元数据——类似于 NSUserPreferences,但附加到我的核心数据存储。看起来应该很简单:

NSManagedObjectContext* moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[moc setPersistentStoreCoordinator:psc];

NSMutableDictionary* metadata = [[psc metadataForPersistentStore:store] mutableCopy];
metadata[@"testKey"] = @"testValue";
[psc setMetadata:metadata forPersistentStore:store];
[moc save:&error];

因此,在此运行之后,我的自定义元数据键/值在商店的元数据字段中可见。但是,当我重新启动应用程序时,我添加的元数据不再存在(但 iCloud 元数据存在)。请注意,这在使用常规非 iCloud 商店时可以正常工作,因此它看起来是特定于 iCloud 的。

附加信息:

假设我获取元数据,添加我的自定义字段,然后使用静态方法保存它:

[NSPersistentStoreCoordinator setMetadata:metadata forPersistentStoreOfType:NSSQLiteStoreType URL:self.coreDataController.iCloudStore.URL error:&error];
NSDictionary* reviewMetadata = [NSPersistentStoreCoordinator metadataForPersistentStoreOfType:NSSQLiteStoreType URL:self.coreDataController.iCloudStore.URL error:&error];

reviewMetadata 变量包含带有我添加的字段的元数据。但是,一旦我重新启动应用程序(并因此重新加载商店),它就会恢复到原来的状态。我什至尝试在执行上述语句后立即设置断点并终止应用程序,当我重新启动应用程序时,我的自定义元数据仍然消失。

有什么想法吗?我是否错误地使用了元数据?这不适用于支持 iCloud 的商店吗?

最佳答案

这似乎对我有用,但它在 OS X 上运行。尚未在 iOS 上尝试过相同的方法。

- (void)setiCloudMetaDataForStore:(NSURL*)fileURL ofType:(NSString *)fileType iCloud:(bool)iCloudEnabled ubiquityName:(NSString*)ubiquityName {
//LOG(@"setiCloudMetaDataForStore called...");

NSError *error;
NSDictionary *metaData = [NSPersistentStoreCoordinator metadataForPersistentStoreOfType:fileType URL:fileURL error:&error];

if (!metaData) {
FLOG(@" problem getting metaData");
FLOG(@" - error is %@, %@", error, error.userInfo);
}

//FLOG(@" metaData is %@", metaData);

//Now see if we can add a setting to indicate it is iCloud enabled
NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithDictionary:metaData];

[dict setObject:[[NSNumber alloc] initWithBool:iCloudEnabled] forKey:@"iCloudEnabled"];

if (!iCloudEnabled)
[dict removeObjectForKey:NSPersistentStoreUbiquitousContentNameKey];
else
[dict setObject:ubiquityName forKey:NSPersistentStoreUbiquitousContentNameKey];

bool result = [NSPersistentStoreCoordinator setMetadata:dict forPersistentStoreOfType:fileType URL:fileURL error:&error];

if (!result) {
FLOG(@" problem setting metaData");
FLOG(@" - error is %@, %@", error, error.userInfo);
}

return;
}

关于ios - Core Data 自定义元数据不为 iCloud 存储保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20436960/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com