菜鸟教程小白 发表于 2022-12-13 11:42:38

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


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

<pre><code>@IBOutlet weak var collectionView: UICollectionView!

override func viewDidLoad() {
    super.viewDidLoad()
    navigationItem.title = NSLocalizedString(&#34;Home&#34;, comment: &#34;Home&#34;)
    collectionView.registerNib(UINib(nibName: &#34;PTHomeCollectionViewCell&#34;, bundle: nil), forCellWithReuseIdentifier: &#34;PTHomeCollectionViewCell&#34;)
}
</code></pre>

<p>有错误</p>

<blockquote>
<p>fatal error: unexpectedly found nil while unwrapping an Optional value</p>
</blockquote>

<p>因为 collectionView 是 nil:
<a href="/image/7tpli.png" rel="noreferrer noopener nofollow"><img src="/image/7tpli.png" alt="enter image description here"/></a> </p>

<p>当然,我已经检查了 IB 中的连接是否已建立:
<a href="/image/pRaKM.png" rel="noreferrer noopener nofollow"><img src="/image/pRaKM.png" alt="enter image description here"/></a> </p>

<p>谁能告诉我为什么collectionView在这里是零?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我可以通过添加来解决这个问题</p>

<pre><code>override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
    let name = NSStringFromClass(self.dynamicType).componentsSeparatedByString(&#34;.&#34;).last!
    super.init(nibName: nibNameOrNil ?? name, bundle: nibBundleOrNil)
}
</code></pre>

<p>到 ViewController 类。但是为什么它会这样工作呢?有没有其他方法可以解决这个问题?</p>

<p><strong>更新</strong>:
这是一个 SwiftViewController 功能,与 bug 非常相似。查看 <a href="https://stackoverflow.com/questions/25538995/cant-load-uiviewcontroller-xib-file-in-storyboard-in-swift" rel="noreferrer noopener nofollow">Can&#39;t Load UIViewController XIB file in Storyboard in Swift</a>和 <a href="https://stackoverflow.com/questions/25149604/are-view-controllers-with-nib-files-broken-in-ios-8-beta-5/25152545#25152545" rel="noreferrer noopener nofollow">Are view controllers with nib files broken in ios 8 beta 5?</a> </p>

<p>它在 iOS 9.4 中已修复,但如果您需要 iOS 8 及更早版本的支持,您仍需要使用变通方法。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如果我在 iOS8 模拟器上运行应用程序,则不会初始化来自 xib 的 IBOutlets,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/32632421/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/32632421/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如果我在 iOS8 模拟器上运行应用程序,则不会初始化来自 xib 的 IBOutlets