IOS CoreData - 无法加载NSPersistentStoreCoordinator
问题描述:
我得到了一个名为TestProject的xcode4项目,即时尝试添加CoreData。我用一些实体添加了一个数据模型(名为TestDataModel),并为这些实体创建了NSManagedObject类。IOS CoreData - 无法加载NSPersistentStoreCoordinator
我的问题是我不能装载持久性存储
if(self.managedObjectContext == nil){
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES);
NSString* basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
NSURL* storeUrl = [NSURL fileURLWithPath:[basePath stringByAppendingPathComponent: @"TestProject.sqlite"]];
NSError* errors;
NSPersistentStoreCoordinator* persistentStoreCoordinator =
[[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[NSManagedObjectModel
mergedModelFromBundles:nil ]];
if(![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:storeUrl
options:nil
error:&errors])
{
NSLog(@"Error loading persistent store: %@", [errors localizedDescription]);
}
self.managedObjectContext = [[NSManagedObjectContext alloc] init];
[self.managedObjectContext setPersistentStoreCoordinator:persistentStoreCoordinator];
}
我不断收到错误:
Error loading persistant store: The operation couldn’t be completed. (Cocoa error 258.)
请注意,我也是在模拟器中运行此。
在此先感谢。
答
想通了。不知道我需要创建数据库
下面的代码工作
if(self.managedObjectContext == nil){
NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent:@"TestProject.sqlite"];
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:storePath]) {
NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"TestProject" ofType:@"sqlite"];
if (defaultStorePath) {
[fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL];
}
}
NSURL *storeUrl = [NSURL fileURLWithPath:storePath];
NSError* errors;
NSPersistentStoreCoordinator* persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[NSManagedObjectModel mergedModelFromBundles:nil]];
if(![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&errors])
{
NSLog(@"Error loading persistent store: %@", [errors localizedDescription]);
}
self.managedObjectContext = [[NSManagedObjectContext alloc] init];
[self.managedObjectContext setPersistentStoreCoordinator:persistentStoreCoordinator];
}
youll需要这个藏汉
- (NSString *)applicationDocumentsDirectory {
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}
答
您使用了错误的目录。
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES);
^^^^^^^^^^^^^^^^^^^^^^^^
变化成
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
^^^^^^^^^^^^^^^^^^^
这样做的NSDocumentDirectory由iOS的创建,但NSDocumentationDirectory目录不是。