2011-04-16 58 views
0

我得到了一个名为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.) 

请注意,我也是在模拟器中运行此。

在此先感谢。

回答

0

想通了。不知道我需要创建数据库

下面的代码工作

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]; 
} 
1

您使用了错误的目录。

NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES); 
                ^^^^^^^^^^^^^^^^^^^^^^^^ 

变化成

NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
                ^^^^^^^^^^^^^^^^^^^ 

这样做的NSDocumentDirectory由iOS的创建,但NSDocumentationDirectory目录不是。