【问题标题】:Unable to find nib named error when trying to load nib from within a framework尝试从框架内加载 nib 时找不到 nib 命名错误
【发布时间】:2012-08-27 14:26:36
【问题描述】:

我有一个“主应用”和一个“辅助应用”(沙盒,如果重要的话)共享一个私有框架,包括一些资源、nib 文件、声音文件等。

框架被两个应用程序调用和使用,没有问题。但是,在框架代码中,我有一个NSViewController,它加载了一个包含在其资源文件夹中的 nib 文件。只要它被“主应用程序”调用,这似乎就可以工作。但是,对 Helper 应用程序(登录项)执行相同操作不起作用并且失败并出现 "Unable to find nib named" 错误。

实际的“框架”被复制到主应用程序的“框架”目录中,我在帮助应用程序中使用@rpath 来查找框架:@executable_path/../../../../Frameworks

这个设置似乎工作得很好,但是在运行时框架代码似乎试图在帮助应用程序的资源文件夹下而不是在框架的资源文件夹下找到命名资源。我可以在 xcode 中设置一个设置或一些标志,以使框架始终查看框架的可执行文件/库的安装路径吗?

【问题讨论】:

    标签: objective-c xcode macos frameworks


    【解决方案1】:

    似乎唯一的解决方案是将框架也复制到“Helper”应用程序中。如果框架只是指向放置在主应用程序中的实际框架的符号链接,则资源不会被加载。

    【讨论】:

      【解决方案2】:

      您可以做的是使您的框架动态或共享,如此处所述Dynamic Library Programming Topics

      虽然这是一个复杂的过程,但一个非常好的功能。

      还有什么可以帮助您?
      也许在 Xcode 的 Build Settings 下编辑 Library Search Paths 或 Framework Search Paths。您可以在此处指定要查找的其他搜索路径。

      尽管如此,我不会将框架复制到主应用程序的目录中。我会将它留在磁盘上的一个位置,将它们添加到您的项目(主要和助手)并添加指定的搜索路径。

      顺便问一下:你的框架是如何实现的?是文件夹,是编译的,还是只有代码文件?

      【讨论】:

      • 不幸的是,动态库无法工作,因为我需要在应用程序之间共享资源,而正确的做法是使用框架。此外,鉴于我的应用程序的沙盒和框架是私有的,我不能走另一条路线将框架放置在共享位置。话虽如此,如下所述,我设法通过将框架复制到帮助应用程序来解决它,然后我可以正确加载捆绑的资源。因为我试图节省内存/空间,所以很痛苦,但是好吧。
      • 好吧,我想了一个这样的答案。不确定你的实现是什么样的。但现在我知道得更多了。只有动态库才能减少内存分配......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多