当前位置: 首页 > 面试题库 >

在Swift框架中加载资源(例如,故事板)

夹谷和韵
2023-03-14
问题内容

我正在尝试制作一个将故事板捆绑在一起的框架。我已经检查过,并且创建的.framework包括我的.storyboard文件(作为.storyboardc文件),并且已经获得了在运行时加载情节提要的框架。但是,这是一个框架,我希望代码尽可能多才多艺,而且我觉得我当前的解决方案有些拙劣。目前,我正在使用以下代码加载情节提要:

let mainBundlePath: String = NSBundle.mainBundle().resourcePath
let frameworkBundlePath = mainBundlePath.stringByAppendingPathComponent("Frameworks/AuthenticationManager.framework")
let frameworkBundle = NSBundle(path: frameworkBundlePath)
let storyboard = UIStoryboard(name: "Storyboard", bundle: frameworkBundle)

我注意到的几件事可能是陷阱:

  • 框架(Frameworks/)的路径将来可能会改变,因此不应该依赖吗?
  • 框架的名称可以更改,但是如果不先获取框架的名称,就无法NSBundle获得产品名称吗?
  • 框架不是真正的捆绑包(?),因此将它们作为捆绑包加载会在将来产生无法预料的后果吗?

可能还有其他问题,上述问题的解决方案,或者上述问题可能毕竟不是问题,但我一直没有想到。

这个问题可能更适合于Code
Review
,但是我觉得在这里也很合适。如果需要将其移至该处,请随意执行此操作或告诉我执行此操作。


问题答案:

这是一个更干净的解决方案(不涉及框架标识符):

let storyboardName = "StoryboardName"
let storyboardBundle = NSBundle(forClass: self)
let storyboard = UIStoryboard(name: storyboardName, bundle: storyboardBundle)

如果此代码不在static方法内部,请使用YourClass.self代替self

Swift 3的示例

let storyboardBundle = Bundle(for: NumberPadViewController.self)
super.init(nibName: "NumberPadViewController", bundle: storyboardBundle)


 类似资料:
  • 问题内容: 如何在Clojure程序中加载程序资源,例如图标,字符串,图形元素,脚本等?我使用的项目布局类似于许多Java项目中的布局,在Java项目中,“资源”目录挂在“源”目录上。一个jar文件是从源代码创建的,包括资源,但是我似乎无法像在Java中那样加载资源。 我尝试的第一件事是 但是永远找不到资源。 您可以使用类似的方法 其中name是要加载的资源的名称,而流是。 您可以尝试将上下文类加

  • 我最近从故事板转换到XIB。因为我有大量的视图,而且在git存储库上使用XIB更容易。(此外,该应用程序现在将可用于iOS4)。 下面是我以前拥有的代码,但我想知道如果没有故事板,但使用XIBs,我将如何实现同样的功能:

  • 问题内容: 我有一个Objective- C框架(框架A),该框架公开了一些公共和私有标头。公共头文件也在框架的伞头文件中声明。我有第二个Swift框架(框架B),它与Objective- C框架链接。 现在,如果要在BI中导入A的公共标头,只需要做一个即可。 但是,如何导入私有标头呢? 我知道桥接头不是一个选择,因为框架不支持该头。我是否需要以某种方式为专用标头创建一个单独的伞形标头? 问题答案

  • 浏览器允许我们跟踪外部资源的加载 —— 脚本,iframe,图片等。 这里有两个事件: onload —— 成功加载, onerror —— 出现 error。 加载脚本 假设我们需要加载第三方脚本,并调用其中的函数。 我们可以像这样动态加载它: let script = document.createElement('script'); script.src = "my.js"; docume

  • CodeIgniter 的"自动加载"特性可以允许系统每次运行时自动初始化类库、辅助函数和模型。 如果你需要在整个应用程序中全局使用某些资源,为方便起见可以考虑自动加载它们。 支持自动加载的有下面这些: libraries/ 目录下的核心类 helpers/ 目录下的辅助函数 config/ 目录下的用户自定义配置文件 system/language/ 目录下的语言文件 models/ 目录下的模

  • 传统方式的导入外部JS和CSS文件的方法是直接在模板文件使用: <script type='text/javascript' src='/static/js/common.js'> <link rel="stylesheet" type="text/css" href="/static/css/style.css" /> 系统提供了专门的标签来简化上面的导入: {load href="/stati