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

Pet*_*erK 4 core-data objective-c nsfilemanager

我正在尝试使用以下方法将sqlite DB添加到应用程序中:CoreData:在iOS应用程序中预加载数据

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

[NSFileManager copyItemAtPath:toPath:error:]: source path is nil 
Run Code Online (Sandbox Code Playgroud)

我使用以下代码:

- (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;
Run Code Online (Sandbox Code Playgroud)

}

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

Mec*_*han 16

好了,这个错误是指NSString *sqlitePath== nil使99%的机会,它是一个或多个以下内容:

  1. 该文件未添加到项目中的正确目标
    • 通过File Inspector视图下的"Target Membership"验证Peter_R0_1.sqlite文件)
  2. 和/或:您将文件复制到特定的子目录而不是默认目录.
    • 验证文件是否列在Target的"Build Phases"下的"Copy Bundle Resources"下,而不是"Custom Files"下的自定义目标或子路径下.
  3. 和/或:你的文件名中有一个拼写错误.