我有一些我想用CoreData框架存储的模型类。我创建了xcdatamodel文件,并将这些已存在的类添加到CoreData模型文件中。我还从XCode的核心数据项目模板中复制了负责管理上下文等的代码。
现在我有以下代码(它被复制,只有文件名被更改为HistoryDataModel):
- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel != nil) {
return managedObjectModel;
}
NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"HistoryDataModel" ofType:@"momd"];
NSLog(@"Model path:", modelPath);
NSURL *modelURL = [NSURL fileURLWithPath:modelPath];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return managedObjectModel;
}
现在,当我运行此代码并尝试访问CoreData中的数据时,我收到以下错误:
*由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'* - [NSURL initFileURLWithPath:]:nil string parameter'
,它发生在
NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"HistoryDataModel" ofType:@"momd"];
正在执行(模型Path是一个空字符串)。
任何想法我可能做错了什么? 谢谢!
答案 0 :(得分:3)
您可以尝试以下代码段,这将为您节省大量时间:)
managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
它返回通过合并在所有包中找到的所有模型(nil参数)创建的模型。您可以将参数设置为特定的包数组。
答案 1 :(得分:1)
您的核心数据模型已经版本化吗?如果没有,那么正确的扩展应该是妈妈
要创建版本化模型,请选择模型并在菜单中运行“设计/数据模型/添加模型版本”。
答案 2 :(得分:0)
我遇到了同样的问题,以下是我如何解决它: 这是我的旧代码
[self.PDFWebView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:pdfFileName ofType:@"pdf"]]]];
以下是我已解决的代码:
[self.PDFWebView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath: [[NSBundle mainBundle]pathForResource:pdfFileName ofType:@"PDF"]]]];
如您所见,第一行的类型为:@“pdf”,而第二行的类型为:@“pdf”。应用程序中包含的所有pdf文件都以.PDF结尾,所以当我查找文件类型pdf时,我收到了一个nil错误。
明显的错误,但我认为IOS足够聪明,可以检查.pdf和.PDF,但我错了。也许这就是这个人所拥有的问题。