将sqlite导入coredata

man*_*urt 1 sqlite iphone import core-data

我之前已经将sqlite预先填充的dbs导入我的coredata项目,但现在我已经在3.2.5中创建了一个项目.xcode,在AppDelegate中为nstring更改了nsurl,所以我继续使用它,但是现在我的sqlite没有导入到项目中,

如果我离开我的PersistentStoreCoordinator来创建新的db空白它工作正常,

 NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"ChildCare_v02.sqlite"];
Run Code Online (Sandbox Code Playgroud)

但是当我更改代码以导入预先填充的数据库(称为相同只是为了澄清)时,它会给我一个警告和崩溃,

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (persistentStoreCoordinator_ != nil) {
return persistentStoreCoordinator_;
}
NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"ChildCare_v02.sqlite"]; //WARNING !! here
NSURL *storeUrl = [NSURL fileURLWithPath:storePath]; 
//NSURL *storeURL = [[self applicationDocumentsDirectory]    URLByAppendingPathComponent:@"ChildCare_v02.sqlite"]; //actual SDK style for blank db

// Put down default db if it doesn't already exist
    NSFileManager *fileManager = [NSFileManager defaultManager];
   if (![fileManager fileExistsAtPath:storePath]) {
    NSString *defaultStorePath = [[NSBundle mainBundle]  pathForResource:@"ChildCare_v02" ofType:@"sqlite"];
    if (defaultStorePath) {
        [fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL];
    }
    }
NSError *error = nil;
persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc]  initWithManagedObjectModel:[self managedObjectModel]];
if (![persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error]) {


NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
    }    
    return persistentStoreCoordinator_;
    }
Run Code Online (Sandbox Code Playgroud)

这是控制台中的崩溃日志

-[NSURL stringByAppendingPathComponent:]: unrecognized selector sent to instance  0x5b40e50
 2011-02-15 21:06:59.245 Staff_02c[469:207] *** Terminating app due to uncaught  exception 'NSInvalidArgumentException', reason: '-[NSURL stringByAppendingPathComponent:]:     unrecognized selector sent to instance 0x5b40e50'
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题?就在我艰难的时候,我获得了核心数据!! 面团!!

Mat*_*uch 5

apple改变了在核心数据模板中返回应用程序字典的辅助方法.

你依赖这个版本:

- (NSString *)applicationDocumentsDirectory {
    return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}
Run Code Online (Sandbox Code Playgroud)

但苹果改变了这个版本

- (NSURL *)applicationDocumentsDirectory {
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}
Run Code Online (Sandbox Code Playgroud)

修复它,只需改变它.

NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"ChildCare_v02.sqlite"]; //WARNING !! here
NSURL *storeUrl = [NSURL fileURLWithPath:storePath]; 
//NSURL *storeURL = [[self applicationDocumentsDirectory]    URLByAppendingPathComponent:@"ChildCare_v02.sqlite"]; //actual SDK style for blank db
Run Code Online (Sandbox Code Playgroud)

对此

//NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"ChildCare_v02.sqlite"]; //WARNING !! here
//NSURL *storeUrl = [NSURL fileURLWithPath:storePath]; 
NSURL *storeUrl = [[self applicationDocumentsDirectory]    URLByAppendingPathComponent:@"ChildCare_v02.sqlite"]; //actual SDK style for blank db
Run Code Online (Sandbox Code Playgroud)

对不起,但是omfg