带有 nib 文件的视图控制器在 ios 8 beta 5 中是否损坏?

2024-04-23

我在 ios 8 beta 4 中创建了一个测试项目,它作为主视图控制器,并使用 xib 文件作为 UIViewController 子类创建了第二个视图控制器。

我在主控制器上放置了一个按钮来显示第二个控制器:

class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

@IBAction func testVCBtnTapped() {
    let vc = TestVC()
    presentViewController(vc, animated: true, completion: nil)
}
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}

我运行应用程序并按下按钮会出现第二个控制器 - 一切都很好

转到 xcode beta 5,我运行该应用程序,当我按下按钮时,屏幕变黑。

因为我知道他们弄乱了初始化代码,所以我尝试添加覆盖来查看它是否可以修复它:

class TestVC: UIViewController {

override init() {
    super.init()
}
required init(coder aDecoder: NSCoder!) {
    super.init(coder: aDecoder)
}
override init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!) {
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}

同样的问题。将 required 和 overrides 更改为 xcode 接受的所有可能的组合没有任何效果。

如果我使用故事板创建另一个控制器并继续它,一切都很好。

有任何想法吗?

编辑 - 新信息

  1. 在 init 中尝试 nibName = nil - 同样的问题
  2. 在 Objective C 中创建了相同的应用程序并且运行良好

显然是 swift beta 5 的问题


我无法判断这是否是一个错误,但它肯定是一个变化。当然他们可能会把它改回来……无论如何,种子 5 中的规则是:

视图控制器将not仅仅因为它具有相同的名称,就会自动找到它的 .xib。您必须明确提供名称。

因此,在您的情况下,任何初始化此视图控制器的尝试最终都必须调用nibName:bundle:具有明确的笔尖名称("TestVC"), 我假设。

如果您希望能够通过调用来初始化

let vc = TestVC()

正如您在呈现视图控制器中所做的那样,然后只需覆盖init()在呈现的视图控制器中调用super.init(nibName:"TestVC", bundle:nil)这就是你所需要的(除了我认为你还需要init(coder:)塞子讨论here https://stackoverflow.com/questions/25126295/swift-class-does-not-implement-its-superclasss-required-members).

EDIT你说得对,这是一个 Swift 独有的问题。发现得好。在 Objective-C 中,初始化为init (or new)仍然工作正常;视图控制器正确找到其同名 .xib 文件。

另一个编辑决定因素不是 Objective-C 还是 Swift 调用init。是是否视图控制器本身是用 Objective-C 或 Swift 编写的。

最终编辑解决方法是像这样声明 Swift 视图控制器:

@objc(ViewController) ViewController : UIViewController { // ...

括号中的名称消除了导致问题的名称损坏。很可能在下一个版本中这个问题将被修复,您可以采取@objc再次离开。

另一个最终编辑坏消息:我就此提交的错误报告“按预期工作”。他们指出我所要做的就是命名.xib周围模块之后的文件,例如如果我的应用程序被调用尼克查找器,那么如果我命名我的.xib file NibFinder.ViewController.xib,实例化时会自动找到ViewController().

这确实是事实,但在我看来,这只是重申了这个错误; Swift 查找过程在模块名称前面添加。所以苹果说我应该努力并在我的模块前面添加相同的模块名称.xib文件,而我是说苹果应该在执行搜索时努力并去掉模块名称。

真正最终的编辑这个错误在 iOS 9 beta 4 中得到了修复,所有这些解决方法都变得不必要了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有 nib 文件的视图控制器在 ios 8 beta 5 中是否损坏? 的相关文章

  • 为什么 Swift 中会出现“使用未声明类型 UITableView”的情况?

    我是新来的Swift 我创建了第二个swift file call DeviceInfo swift并添加一个UIViewcontroller in Main storyboard 我还添加一个UITableView in UIViewco
  • Crashlytics 未报告任何前台 OOM

    我通过增加一个无限大的 NSStrings NSArray 造成了 OOM 崩溃 我什至尝试过调用exit 0 只是为了让它看起来像 OOM 虽然这些事情可以意外终止应用程序 但我没有看到 Crashlytics 上报告的任何 OOM 并且
  • UIWebView 中横向模式的 Youtube 视频

    我的申请不是为了风景而做的 但是当我打开我的 YouTube 频道时UIWeb视图和一个用户发布视频 它出现在肖像中 我想让它在用户旋转 iPhone 时以横向模式显示 How to 启用横向模式如本例所示 我知道有一些 肮脏的黑客 可以做
  • 为什么需要为每个线程创建 ABAddressbookRef?

    苹果说 重要提示 ABAddressBookRef 的实例不能被多个使用 线程 每个线程必须创建自己的实例 But why 我知道某些特定的类或操作必须在主线程中完成 而且我知道有些对象不是线程安全的 这意味着如果这些对象同时被两个不同的线
  • 更改 NSManagedObject 属性而不触发委托方法?

    有什么方法 或技巧 可以修改NSManagedObject目前由一名代表持有NSFetchedResultsController不触发didChangeObject and controllerWillChangeContent 委托方法
  • 如何在 Azure 中调试测试发送?

    I am trying to setup a successfull push notifications between my Net backend and ios client in azure I followed this htt
  • 如何使用自定义转换在当前上下文上呈现视图控制器?

    我遇到了视图控制器包含问题 并希望通过自定义演示 动画 在当前上下文上 呈现视图控制器 我有一个根视图控制器 它有两个子视图控制器 可以作为根的子视图添加和删除 当这些子视图控制器呈现视图控制器时 我希望呈现在当前上下文之上 以便当呈现的子
  • Xcode:PDF 中的矢量图像质量较差

    对于我的 iOS Swift 项目 我使用矢量化 pdf 文件 Xcode 从中渲染 1x 2x 3x 图像 当我将 PDF 生成的图像的质量与相同大小的普通 PNG 图像进行比较时 我发现它们之间的质量存在很大差异 理论上 下图中第一行和
  • 如何解决 iPhone 应用程序中的无效转换说明符警告

    我有 iphone 应用程序 其中为标签分配值 但是当我构建它时 它显示以下警告无效转换说明符 这是标签赋值的代码 label1 text NSString stringWithFormat d newvalue1 The 被解释为格式字符
  • Xcode 不再识别测试

    我已经解决这个问题几天了 但我没有任何想法 我在 Xcode 中使用单元测试 效果很好 突然 Xcode 不再识别我的测试 如果我进入测试面板 它会显示我的测试为零 我其实有13个 运行单独测试或某些课程的能力现已消失 它不会在编辑器区域的
  • 如何在 Xcode 中使用“-force_load”链接库?

    我的其他库不允许我设置 ObjC 或 all load 标志 所以我需要使用 force load 来链接我的库 我的项目下有 GoogleOpenSource framework 和 GooglePlus framework 那么如何正确
  • 保存 ScrollViews 位置并稍后滚动回该位置(偏移位置)

    我找到了保存 ScrollViews 的方法offset with a GeometryReader and a PreferenceKey SwiftUI 从 ScrollView 获取当前滚动位置 https stackoverflow
  • 故事板中的 Xcode 6 UIVisualEffectView

    我正在 Xcode 6 中的对象库中查找 UIVisualEffectView 以在 Storyboard 中添加模糊效果 我知道如何以编程方式执行此操作 但我找不到在故事板中执行此操作的方法 这在当前的测试版中是否不可用 或者有没有一种不
  • iOS 安全性将带有密码的数据发送至服务器或从服务器发送数据

    我正在构建一个应用程序 需要在服务器执行任何操作之前从用户设备发送密码以在服务器上进行身份验证 事情是这样的 用户的手机上有一个纯文本密码 该密码也在服务器中以 bcrypt 二进制文件的形式存在 用户想要从数据库中获取某些内容 因此用户通
  • C++11 的 LLVM&Clang 支持

    我有一些为 MS VC 10 编写的代码 我使用 C 11 特别是像这样的表达式 std function
  • 使用 AlamofireImage 下载图像有进度吗?

    有没有办法使用 AlamofireImage 下载图像并获得有关下载进度的某种反馈 同时利用它的强大功能UIImage 扩展 图像过滤器和图像缓存 我知道我可以退回到平原Alamofire request responseImage但我想让
  • Swift 和 Xcode - 如何创建自定义选项卡栏图标

    我正在用 Swift 编写的 Xcode 中处理一个选项卡式应用程序项目 Xcode 6 3 and Swift 1 2 我在使用自定义选项卡栏图标时遇到很多麻烦 我在 Photoshop CS6 中设计了一张图像 将其保存为 PNG 在
  • VoiceOver 的 UISlider 可访问性特征?

    使 UISlider 在启用 VoiceOver 的情况下可用所需的正确 UIAccessibility 特征和处理程序是什么 是否有关于用户如何使用启用 VoiceOver 的 UISlider 的描述 以下是我最终添加到 UISlide
  • 将实体添加到核心数据

    我们有一个使用核心数据的应用程序 在下一个版本中 我想向现有实体添加一个新实体 只需添加新的然后从软件中填充它就可以了吗 还是有什么我必须考虑的事情 迁移有几种类型 最简单的是使用推断映射模型的轻量级迁移 这意味着您只需告诉它进行迁移 软件
  • 如何解决 Xcode 布局问题?

    我正在为 iPhone 设计布局 因此我为其选择了 wCompact 和 hAny 尺寸类别 我修复了约束 并且在运行时没有问题 但每次我关闭 Xcode 重新打开项目时 都会出现多个约束问题 如图所示 我解决了根据约束更新框架的问题 选择

随机推荐