【问题标题】:URLForResource alway returns nilURL ForResource 总是返回 nil
【发布时间】:2011-06-29 00:24:52
【问题描述】:

我创建了一个项目,但没有选中“使用 CoreData”。项目名称是“词汇表”

现在我改变了主意,所以我使用 Add->New File->Resource->Data Model->为其命名 Glossary->没有选择任何类->Finish 添加了一个数据模型。

下一步是设计我的数据模型。 然后我将所需的代码添加到我的 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”对项目执行相同的步骤效果很好。

有人有想法吗?

【问题讨论】:

    标签: iphone objective-c ios


    【解决方案1】:

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

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

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

    【讨论】:

    • 是的!谢谢!我今天被那个卡住了3个小时。我不想为我已经为 OS X 制作的应用程序的 iOS 版本创建新模型,所以我在我的新 iOS 应用程序上勾选了“使用核心数据”,然后扔掉 xcdatamodeld 文件并替换它使用我的旧 OS X 应用程序中的 xcdatamodel。如果 Apple 选择不那么糟糕的扩展来使差异更加明显,那就太好了。
    【解决方案2】:

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

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

    【讨论】:

    • 是的,这已经是红色的了,但是正如我在教程中发现的那样,并且当我编写创建项目并选中“使用核心数据进行存储”时,它工作正常。所以 momd 不应该是一个目录。我试图在 Finder 中搜索 momd,但 finder 没有找到任何东西(没有目录或文件)。对我来说这很奇怪:)
    • 哎呀,我的错,我只是在脑海中用 .xcdatamodel[d] 替换了 momd,抱歉造成混淆。
    猜你喜欢
    • 2019-06-30
    • 2017-05-29
    • 2016-02-15
    • 1970-01-01
    • 2017-03-28
    • 2015-03-05
    • 2014-08-25
    • 2016-05-17
    • 1970-01-01
    相关资源
    最近更新 更多