[NSFileManager copyItemAtPath:toPath:error:]:源路径为nil

时间:2012-06-12 21:01:35

标签: objective-c core-data nsfilemanager

我正在尝试使用以下代码将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;

}

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

1 个答案:

答案 0 :(得分:16)

嗯,这个错误意味着NSString *sqlitePath== nil,所以99%的可能性是以下一个或多个:

  1. 该文件未添加到项目中的正确目标
    • 通过Peter_R0_1.sqlite文件的文件检查器视图下的“目标成员资格”验证
  2. 和/或:您正在将文件复制到特定的子目录而不是默认目录
    • 确认该文件列在Target的“Build Phases”下的“Copy Bundle Resources”下,而不是“Copy Files”下的自定义目标或子路径下。
  3. 和/或:你的文件名中有拼写错误。