【问题标题】:[NSFileManager copyItemAtPath:toPath:error:]: source path is nil[NSFileManager copyItemAtPath:toPath:error:]:源路径为零
【发布时间】:2012-06-15 19:36:35
【问题描述】:

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

}

非常感谢您对这个问题的帮助

【问题讨论】:

  • 您是否记得将Peter_R0_1.sqlite 文件添加到您的项目中?它是否显示在项目的构建阶段中的Copy Bundle Resources 下?
  • 是的,我已将 sqlite DB 添加到项目中。

标签: objective-c core-data nsfilemanager


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2013-01-13
    • 2011-05-18
    • 2011-06-29
    • 2012-02-11
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    相关资源
    最近更新 更多