这是我在init中用于存储类的代码,直到最近才运行良好..当我尝试测试时,它在addPersistentStoreWithType崩溃(标记如下)...我在切换到iPhone 5之后注意到了这一点试图运行应用程序...但如果我在手机上关闭icloud或在模拟器上测试它没有问题......
-(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"];
}
此外,如果我运行应用程序一次并在崩溃后关闭icloud并再次运行应用程序..数据从icloud中检索...并在应用程序上显示。
输出日志显示了这一点。
iCloud访问文件:// localhost / private / var / mobile / Library / Mobile%20Documents / xxx -PFUbiquitySetupAssistant performPreStoreSetupWithError :: CoreData:Ubiquity: 基线文件存在,但无法读取
答案 0 :(得分:2)
这是内部的iCloud错误。这不是你的错,在代码中你无法做任何事情来修复或阻止它。它将随机发生,没有可预测的时间或原因模式。不幸的是,删除应用程序的数据是唯一真正的解决方案。这样做只会删除iCloud的数据副本,而不会删除存储在应用程序的Documents目录或其他非iCloud位置的数据,因此旧数据仍然存在并不奇怪。