URLForResource始终返回nil

9
我创建了一个项目,但没有选中“使用CoreData”。这个项目的名称是“glossary”。 现在,我改变了主意,并使用“添加->新文件->资源->数据模型”添加了一个数据模型,将其命名为Glossary,没有选择任何类,然后完成。 接下来的步骤是设计我的数据模型。 然后我添加了必要的代码到我的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始终为空。创建额外的NSBundle Ref并调用mainBundle可以显示它正在工作,但我不知道这是否是正确的方法。

在创建时选择“使用CoreData”的项目上执行相同的步骤非常好。

有人有想法吗?

2个回答

11

这与模型版本控制有关。您需要添加一个带版本控制的模型(在Xcode项目树中表示为 .xcdatamodeld 扩展名),然后您的代码就可以平稳地运行。

在Xcode 4中,当您添加一个新的Core Data文件时,它默认会进行版本控制,即使您在项目创建后添加了Core Data支持。

如果您不打算使用模型版本,请在您的代码中使用 .mom


是的!谢谢你!我今天卡了那个问题三个小时。我不想为已经为OS X制作的应用程序的iOS版本创建新模型,因此我在我的新iOS应用程序上勾选了“使用Core Data”,然后丢弃了xcdatamodeld文件,并用旧的OS X应用程序中的xcdatamodel替换它。如果苹果选择更少糟糕的扩展名来使差异更加明显,那就太好了。 - ArtOfWarfare

0

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

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


是的,这个已经是红色的了,但我在教程中找到了这一行,并且在创建项目时勾选了“使用Core Data进行存储”,它可以正常工作。因此,momd不应该是一个目录。我尝试在Finder中搜索momd,但Finder没有找到任何东西(没有目录或文件)。对我来说,这非常奇怪 :) - Jonas
糟糕,我的错误。我在脑海中把'momd'替换成了'.xcdatamodel[d]',对于造成的混淆感到抱歉。 - zrzka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接