应用程序崩溃,如果iCloud的(链接与coreData同步)

这是我在初始化存储类中使用的代码,直到最近它工作正常..当我试着testing它,它在addPersistentStoreWithType崩溃(标记如下)…我注意到后切换到iPhone 5,并试图运行应用程序…但如果我关掉我的手机icloud或在模拟器上testing它没有问题…

-(id)init { self = [super init]; if(self) { NSLog(@"%s", __FUNCTION__); favColors = [[NSMutableArray alloc] init]; model = [NSManagedObjectModel mergedModelFromBundles:nil]; NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; NSString *path = [self itemArchivePath]; NSURL *storeURL = [NSURL fileURLWithPath:path]; NSError *error = nil; NSMutableDictionary *options = [NSMutableDictionary dictionary]; NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil]; if (ubiq) { NSLog(@"iCloud access at %@", ubiq); [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(contentChange:) name:NSPersistentStoreDidImportUbiquitousContentChangesNotification object:nil]; NSFileManager *fm = [NSFileManager defaultManager]; NSURL *ubcontainer = [fm URLForUbiquityContainerIdentifier:nil]; [options setObject:@"color" forKey:NSPersistentStoreUbiquitousContentNameKey]; [options setObject:ubcontainer forKey:NSPersistentStoreUbiquitousContentURLKey]; } else { NSLog(@"No iCloud access"); } // ************ Crash here ************** if (![psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:(ubiq?options:nil) error:&error]) { [NSException raise:@"Open failed" format:@"Reason: %@", [error localizedDescription]]; } context = [[NSManagedObjectContext alloc] init]; [context setPersistentStoreCoordinator:psc]; [context setUndoManager:nil]; [self loadAllItems]; } return self; } - (NSString *)itemArchivePath { NSArray *documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentDirectory = [documentDirectories objectAtIndex:0]; return [documentDirectory stringByAppendingPathComponent:@"store.data"]; } 

此外,如果我运行应用程序一次,并closuresicloud后崩溃,再次运行应用程序..数据从icloud检索…并显示在应用程序。

输出日志显示这一点。

iCloud在文件访问:// localhost / private / var / mobile / Library / Mobile%20Documents / xxx -PFUbiquitySetupAssistant performPreStoreSetupWithError :: CoreData:Ubiquity:基线文件存在,但无法读取

这是一个内部的iCloud错误。 这不是你的错,你可以在代码中做任何事情来解决或防止它。 它会随机发生,没有可预测的时间或原因模式。 不幸的是,删除应用程序的数据是唯一真正的解决scheme。 这样做只会删除iCloud的数据副本,而不会删除存储在应用程序的Documents目录或其他非iCloud位置的数据,因此旧数据仍然存在并不奇怪。