iOS iCloud
由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“执行 SQL 字符串时出错”INSERT INTO Y_UBMETA(YPEERID, YTRANSACTIONNUMBER)
未解决的错误 Error Domain=NSCocoaErrorDomain Code=134312 “存储元数据恢复似乎失败,请尝试再次将存储添加到协调器。如果不成功,请将数据迁移到新的泛化持久存储。” UserInfo=0xdba5b80 {NSLocalizedDescription=存储元数据恢复似乎失败,请尝试再次将存储添加到协调器。如果不成功,将数据迁移到新的泛化持久化存储。}, { NSLocalizedDescription = "存储元数据恢复似乎失败,请尝试再次将存储添加到协调器。如果不成功,将数据迁移到新的无处不在的持久存储。”;
我该如何解决这个问题?因为它是 iCloud 的内部查询。我把我的代码块放在我写的方法下面..
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
NSLog(@"persistentStoreCoordinator:%@",[persistentStoreCoordinator_ description]);
if((persistentStoreCoordinator_ != nil))
{
return persistentStoreCoordinator_;
}
NSLog(@"persistentStoreCoordinator:%@",[persistentStoreCoordinator_ description]);
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"CoreDataModel.sqlite"];
persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
NSPersistentStoreCoordinator* psc = persistentStoreCoordinator_;
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSFileManager *fileManager = [NSFileManager defaultManager];
// Migrate datamodel
NSDictionary *options = nil;
// this needs to match the entitlements and provisioning profile
NSURL *cloudURL = [fileManager URLForUbiquityContainerIdentifier:nil];
NSLog(@"cloudURL:%@",cloudURL);
//NSString* coreDataCloudContent = [[cloudURL path] stringByAppendingPathComponent:@"Data"];
cloudURL = [cloudURL URLByAppendingPathComponent:@"Data"];
// NSLog(@"coreDataCloudContent:%@",coreDataCloudContent);
//if ([coreDataCloudContent length] != 0 && [[defaults objectForKey:@"allMetadataFlag"] isEqualToString:@"YES"])
if (cloudURL )//&& [[defaults objectForKey:@"allMetadataFlag"] isEqualToString:@"YES"])
{
// iCloud is available
// cloudURL = [NSURL fileURLWithPath:coreDataCloudContent];
NSLog(@"cloudURL:%@",cloudURL);
options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,
@"SecureAssistant.store", NSPersistentStoreUbiquitousContentNameKey,
cloudURL, NSPersistentStoreUbiquitousContentURLKey,nil];
}
else
{
// iCloud is not available
options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,nil];
}
NSError *error = nil;
[psc lock];
if (![psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error])
{
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
[psc unlock];
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"asynchronously added persistent store!");
[[NSNotificationCenter defaultCenter] postNotificationName:@"RefetchAllDatabaseData" object:self userInfo:nil];
});
});
return persistentStoreCoordinator_;
}