gpt4 book ai didi

iphone - 更多 iCloud 核心数据同步问题

转载 作者:IT王子 更新时间:2023-10-29 07:34:27 25 4
gpt4 key购买 nike

所以,它终于发生了。对于任何独立 iPhone 开发者来说,最糟糕的情况都发生了。升级我的应用程序后,一些用户报告完全数据丢失。 iCloud 核心数据同步不工作。我的用户部分地使用这个应用来经营他们的业务。这是一个真正的灾难性失败

我唯一更改的与 iCloud 相关的是将键值存储添加到 iCloud。核心数据代码保持完全相同,相同模型版本(未迁移)等。

在我的测试中,一切都很顺利!但令我沮丧的是,用户报告说,当他们打开更新后的应用程序时,他们的数据已经不存在了。

这可能是什么原因?

  • 持久性存储 URL(无处不在的 URL)不应更改。
  • 合并冲突也不太可能,因为这个问题应该在更新之前出现。
  • 可能对新的 无处不在的键值存储有些干扰?
    (我几乎排除了这种可能性。)

请在下面找到我的托管对象模型和持久存储的代码。如果您需要其他任何东西来评估问题,请告诉我。

- (NSManagedObjectContext *)managedObjectContext {

if (managedObjectContext_ != nil) {
return managedObjectContext_;
}

NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
managedObjectContext_ = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
[managedObjectContext_ performBlockAndWait:^{
[managedObjectContext_ setPersistentStoreCoordinator:coordinator];
if (useICloud) {
[managedObjectContext_ setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(mergeiCloud:)
name:NSPersistentStoreDidImportUbiquitousContentChangesNotification
object:coordinator];
}
}];
}
return managedObjectContext_;
}

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (persistentStoreCoordinator_ != nil) {
return persistentStoreCoordinator_;
}

NSMutableDictionary *options = [NSMutableDictionary dictionary];
NSURL *storeURL = [[self applicationDocumentsDirectory]
URLByAppendingPathComponent:@"SalesCalls.sqlite"];

[options setObject:[NSNumber numberWithBool:YES]
forKey:NSMigratePersistentStoresAutomaticallyOption];
[options setObject:[NSNumber numberWithBool:YES]
forKey:NSInferMappingModelAutomaticallyOption];

if (useICloud) { // this is an internal flag set to YES
NSURL *iCloudURL = [[NSFileManager defaultManager]
URLForUbiquityContainerIdentifier:nil];

if (nil!=iCloudURL) {
NSString *cloudData = [[iCloudURL path]
stringByAppendingPathComponent:@"data"];
iCloudURL = [NSURL fileURLWithPath:cloudData];

[options setObject:@"at.topofmind.salesplus.store"
forKey:NSPersistentStoreUbiquitousContentNameKey];
[options setObject:iCloudURL
forKey:NSPersistentStoreUbiquitousContentURLKey];

NSURL *nosyncDir = [iCloudURL
URLByAppendingPathComponent:@"data.nosync"];
[[NSFileManager defaultManager] createDirectoryAtURL:nosyncDir
withIntermediateDirectories:YES
attributes:nil error:nil];

storeURL = [nosyncDir
URLByAppendingPathComponent:@"SalesCalls.sqlite"];
}
}

NSError *error = nil;
persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc]
initWithManagedObjectModel:[self managedObjectModel]];
if (![persistentStoreCoordinator_
addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil URL:storeURL options:options error:&error])
{
NSLog(@"Cannot create persistent store coordinator, %@, %@",
error, [error userInfo]);
abort();
}

return persistentStoreCoordinator_;
}

欢迎评论、意见、大胆猜测等(当然还有解决方案!)。

更新:

我的一位客户丢失了所有数据,在重新安装和重置所有内容(重启设备等)后,他无法再与 iCloud 同步。该符号根本不会显示在设置中。

最佳答案

我遇到了类似的东西,但用途很少(根据你的描述,我假设你的音量比我大,这可能是几个案例的原因)

在我的案例中,Apple 似乎在没有提前通知的情况下删除了 icloud 中的 20gb 可用空间。我注意到这 2 位使用数据量大的用户丢失了我的应用程序中的新数据(用于处理历史股票定价),而其他用户我们可以下载相同的数据大小。

我跟进了那两个,帮助他们清理东西以在 icloud 和 voila 中腾出更多空间,再次下载数据后它工作正常。

关于iphone - 更多 iCloud 核心数据同步问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14478517/

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