ios - 如果我在 iOS8 模拟器上运行应用程序,来自 xib 的 IBOutlet 不会初始化

标签 ios interface-builder ios-simulator swift2

我已经使用 XCode 7 GM(基本 SDK - iOS9)构建了一个应用程序。如果我在 iOS 9 模拟器上运行它,它会完美运行,但如果我尝试在 iOS8 上运行它,则会失败:

@IBOutlet weak var collectionView: UICollectionView!

override func viewDidLoad() {
    super.viewDidLoad()
    navigationItem.title = NSLocalizedString("Home", comment: "Home")
    collectionView.registerNib(UINib(nibName: "PTHomeCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "PTHomeCollectionViewCell")
}

有错误

fatal error: unexpectedly found nil while unwrapping an Optional value

因为 collectionView 为零: enter image description here

当然,我已经仔细检查了 IB 中的连接是否已建立: enter image description here

有人可以告诉我为什么这里的collectionView是nil吗?

最佳答案

我能够通过添加来解决此问题

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
    let name = NSStringFromClass(self.dynamicType).componentsSeparatedByString(".").last!
    super.init(nibName: nibNameOrNil ?? name, bundle: nibBundleOrNil)
}

到 View Controller 类。但为什么会这样呢?还有其他方法可以解决这个问题吗?

更新: 这是一个 Swift View Controller 功能,与 bug 非常相似。检查Can't Load UIViewController XIB file in Storyboard in SwiftAre view controllers with nib files broken in ios 8 beta 5?

它已在 iOS 9.4 中修复,但如果您需要 iOS 8 及更早版本的支持,您仍然需要使用解决方法。

关于ios - 如果我在 iOS8 模拟器上运行应用程序,来自 xib 的 IBOutlet 不会初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32632421/

相关文章:

当 navigationController 设置为 false 时,iOS 导航栏 tintColor 不会变白

ios - Interface Builder 错误地调整导航项

ios - 如何为 UICollectionView 启用缩放

objective-c - 一个过滤器正在重置另一个过滤器。不能同时应用它们

iPhone - webViewDidFinishLoad 未调用

ios - 当我尝试在 Xcode 6.1 中调整 Storyboard 中其他 View 的大小时,为什么某些 View 的框架变为 (0,0,0,0)

ios - exc_arithmetic 错误仅与模拟器,分配 UICollectionView flowlayout

ios - Xcode 8 构建仅针对模拟器失败

ios - Meteor run ios - 根本不工作

ios - SDWebImage 库只加载两个图像