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

无法在Swift中的Storyboard中加载UIViewController XIB文件

印曜灿
2023-03-14
问题内容

我已经阅读了使用XCode故事板来实例化使用XIB进行设计的视图控制器,但是在Swift中使用XCode进行工作时遇到了麻烦(使用Xcode 6 Beta 6)。我想知道我做错了什么还是该功能不再可用?

我创建了一个简单的存储库html" target="_blank">https://github.com/jer-k/StoryboardTesting-
Swift
,展示了上述方法。

我设法通过在init中添加和覆盖来解决此问题

required init(coder aDecoder: NSCoder) {
    super.init(nibName: "TestViewController", bundle: NSBundle.mainBundle())
}

但我想知道是否还有情节提要板可以替我处理。创建一个超类以使我的所有UIViewControllers从上面的代码继承都不是世界上最麻烦的事情,但是我对此很好奇。


问题答案:

发生的是,种子5打破了一种机制,即如果视图控制器是Swift类,则视图控制器可以按名称查找其xib。原因是,在Swift的思想中,类的名称与您给它的名称(以及您给xib文件的名称)不同。该名称已被“篡改”,特别是通过在模块名称前添加前缀(即,Swift类具有命名空间)。

我提供了三种解决方法:

  • 您的解决方法很不错(按名称显式加载.xib文件)

  • 将.xib文件命名为 MyModule.TestViewController.xib ,其中MyModule包的名称(即项目名称)在哪里(这是Apple的建议,但我讨厌它)

  • @objc(TestViewController)在视图控制器的class声明之前使用以克服名称混乱的问题,这是打破机制的原因(这是我赞成的方法)

编辑 此错误已在iOS 9 beta 4中修复。如果nib文件搜索失败,iOS 9现在会从视图控制器类名称中剥离模块名称,并再次执行nib文件搜索。



 类似资料:
  • 我读过使用XCode故事板来实例化使用XIB进行设计的视图控制器,但我在Swift(使用XCode 6 Beta 6)中遇到了困难。我想知道是我做错了什么,还是这个功能不再可用了? 我创建了一个简单的存储库https://github.com/jer-k/storyboardtesting-swift,它展示了上述方法。 我通过添加并重写到init来解决这个问题 但我想知道是否仍有可能让故事板为我

  • 问题内容: 我是PostgresSQL的新手,我正尝试加载以下格式的数据: 记录超过1万,某些列可能包含NULL数据。当我尝试这样做时: 我收到以下错误:ERROR:最后一个预期的列SQL状态之后的多余数据:22P04 我已经检查了列,它们还可以。这意味着不会遗漏任何列。 希望有人能帮忙。提前谢谢。 问题答案: 应该是 对我有用

  • 问题内容: 这是我尝试将Maven项目部署到tomcat时遇到的错误 错误: 但是WEB-INF \ lib中有javax.servlet-api-3.0.1.jar 问题答案: 信息:validateJarFile(D:\ Softwares \ tomcat \ apache-tomcat-7.0.50 \ webapps \ myWebApp_1 1 \ WEB-INF \ lib \ ja

  • 我正试图使用pandas library的read\u json()和python的内置json库从python中的此链接加载数据集,该数据集存储在我的计算机中(与我的笔记本相同的文件夹)。以下是我的代码: 另一个是: 在第一种情况下,我得到以下错误: 在第二种情况下,我得到: 我正在Ubuntu 18.04中使用jupyter笔记本

  • 我正在使用文件IO动态创建一个文件, FileOutputStream fos=新的FileOutputStream(“sample.txt”); 并尝试加载样本。使用getClass()创建txt。getResourceAsStream(“sample.txt”)在另一个类中,它无法加载文件,而如果我在eclipse中刷新项目,它可以加载文件,getResourceStream是否缓存文件?,我

  • 问题内容: 我有以下代码: 我收到以下错误: “ NSURLRequest”不可转换为UIWebView。 知道是什么问题吗? 问题答案: loadRequest:是实例方法,不是类方法。您应该尝试使用UIWebview的实例作为接收者而不是类本身来调用此方法。 但是,正如@radex在下面正确指出的那样,您还可以利用currying来调用如下函数: 斯威夫特5