4

我正在尝试使用以下方法将 sqlite DB 添加到应用程序中:CoreData: Preload Data in Your iOS App

按照教程我遇到了一个问题:

[NSFileManager copyItemAtPath:toPath:error:]: source path is nil 

我使用以下代码:

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
    if (__persistentStoreCoordinator != nil) {
    return __persistentStoreCoordinator;
}

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Peter_R0_1.sqlite"];

if(![[NSFileManager defaultManager] fileExistsAtPath:[storeURL path]]) {
    NSString *sqlitePath = [[NSBundle mainBundle] pathForResource:@"Peter_R0_1" ofType:@"sqlite" inDirectory:nil];
    NSError *anyError = nil;
    BOOL success = [[NSFileManager defaultManager] copyItemAtPath:sqlitePath toPath:[storeURL path] error:&anyError];
}


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;

}

我非常感谢在这个问题上的一些帮助

4

1 回答 1

17

嗯,这个错误意味着99% 的机会NSString *sqlitePath== nil以下一项或多项:

  1. 文件未添加到项目中的正确 Target
    • 通过文件检查器视图下的“目标成员资格”验证Peter_R0_1.sqlite文件)
  2. 和/或:您将文件复制到特定的子目录而不是默认目录。
    • 验证文件是否列在 Target 的“Build Phases”下的“Copy Bundle Resources”下,而不是在具有自定义目标或子路径的“Copy Files”下。
  3. 和/或:您在文件名中有错字。
于 2012-06-12T23:07:41.977 回答