Mun*_*ndi 59 iphone synchronization core-data ios icloud
所以,它终于发生了.发生了任何独立iPhone开发人员的最糟糕情况.升级我的应用程序后,有几个用户报告完全数据丢失.iCloud核心数据同步无法正常工作.我的用户正在部分使用此应用来运行他们的业务.这是一场真正的灾难性失败.
我改变的唯一与iCloud相关的事情是将键值存储添加到iCloud.核心数据代码保持完全相同,模型版本相同(无迁移)等.
在我的测试中,一切都很美妙!但令我沮丧的是,用户报告说,当他们打开更新的应用程序时,他们的数据不再存在.
这可能是什么原因?
请在下面找到我的托管对象模型和持久性存储的代码.如果您还需要其他任何东西来评估问题,请告诉我.
- (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_;
}
Run Code Online (Sandbox Code Playgroud)
和
- (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_;
}
Run Code Online (Sandbox Code Playgroud)
评论,意见,猜测等(当然还有解决方案!)都是受欢迎的.
更新:
我的一个客户丢失了他的所有数据,重新安装和重置所有内容(重启设备等)后,他再也无法与iCloud同步了.该符号根本不会显示在"设置"中.
我面临着类似的东西,但用途很少(根据你的描述,我假设你的体积比我大,这可能是几种情况的原因)
就我而言,苹果似乎在没有提前通知的情况下删除了 icloud 中的 20GB 可用空间。我注意到,电力数据使用用户的两个用户丢失了我的应用程序中的新数据(用于处理历史股票定价),而其他用户我们只需下载相同的数据大小即可。
我跟进了那两个,帮助他们清理了一些东西,以便在 icloud 中腾出更多空间,瞧,再次下载数据后,一切正常。
| 归档时间: |
|
| 查看次数: |
2871 次 |
| 最近记录: |