' - [NSURL initFileURLWithPath:]:使用CoreData时的nil字符串参数'

时间:2011-02-22 12:13:48

标签: iphone core-data ios4

我有一些我想用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是一个空字符串)。

任何想法我可能做错了什么? 谢谢!

3 个答案:

答案 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,但我错了。也许这就是这个人所拥有的问题。