URLForResource总是返回nil

时间:2011-03-04 19:59:19

标签: iphone objective-c ios

我创建了一个项目而没有检查“使用CoreData”。项目名称是“词汇表”

现在我改变了主意,因此我添加了一个数据模型,使用Add-> New File-> Resource-> Data Model->给它命名Glossary-> didn`t选择任何类 - >完成。

下一步是设计我的数据模型。 然后我将所需的代码添加到我的AppDelegate。 对于所有步骤,我遵循本教程: https://developer.apple.com/library/ios/#documentation/DataManagement/Conceptual/iPhoneCoreData01/Introduction/Introduction.html%23//apple_ref/doc/uid/TP40008305-CH1-SW1

我现在的问题是这一行:

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"glossary" withExtension:@"momd"]

modelURL永远是nill 创建一个额外的NSBundle Ref并调用mainBundle告诉我这是有效的,但是我不知道它是否真的是正确的路径。

在创建作品时,选择“使用CoreData”的项目执行相同的步骤。

有人有想法吗?

2 个答案:

答案 0 :(得分:11)

它与model versioning有关。您想要添加版本化模型(Xcode项目树中的项目将具有.xcdatamodeld扩展名),然后您的代码将顺利运行。

在Xcode 4中添加新的Core Data文件时,默认情况下会对其进行版本控制。即使您在项目创建后添加了Core Data支持。

如果您不打算拥有型号版本,请在代码中使用.mom

答案 1 :(得分:0)

我不是100%肯定,但URLForResource仅适用于文件,momd是目录。

URLForResource文档:该方法首先在指定包的非本地化资源目录中查找匹配的资源文件。 (在Mac OS X中,此目录通常称为资源,但在iOS中,它是主要的捆绑目录。)如果找不到匹配的资源文件,则它会查找任何可用的顶级语言特定的“.lproj”目录。 (特定于语言的目录的搜索顺序对应于用户的首选项。)它不会通过任何这些位置的其他子目录进行递归。有关更多详细信息,请参阅分发包和本地化。