gpt4 book ai didi

objective-c - 在 iOS 4.3 上运行的 ARC 项目中,ViewController 没有从 nib 加载 subview ?

转载 作者:行者123 更新时间:2023-11-29 13:41:01 25 4
gpt4 key购买 nike

我的团队最近将一个相当大的项目转换为 ARC。转换顺利,应用程序运行,并且在 5.0 上运行良好。

问题出在4.3。使用普通 init 在代码中实例化的任何 View Controller 都不会加载 vc View 的任何 subview (这在 5.0 上有效)

总结如下:

使用 [[MyViewController alloc] init] 实例化 View Controller 。 (UIViewController的init调用initWithNibName:nil bundle:nil)

这会加载一个与 View Controller (MyViewController.xib) 同名的 nib

*预期:nib 正常实例化,包含顶级 View 的所有 subview 和所有导出设置

*实际:nib 被实例化,MyViewController 对象的 View 属性被设置。但是, View 的 subview 数组是空的,这些 View 的任何导出都是零,并且 View 在呈现时显示为空

*解决方法:使用

实例化 VC/加载 nib
[[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]

我无法在干净的项目中复制它,无论是从 ARC 开始还是转换为 ARC。我和我的团队正在研究这个问题,但与此同时,想知道是否有其他人遇到过这个问题并找到了根本原因或触发因素。

最佳答案

跟进以防其他人遇到此问题。

由于我们支持 4.x 并使用 ARC,因此我们决定使用 Mike Ash 的 MAZeroingWeakRef 在 4.x 中获取弱指针。最终我们将问题隔离到足以追溯到 MAZeroingWeakRef。我们向 MAZWR 项目和 github 发布了一个问题,Mike 解释了发生了什么:

https://github.com/mikeash/MAZeroingWeakRef/issues/13

(基本上 MAZWR 将 VC 类的内部名称更改为类似 TestViewController_MAZeroingWeakRefSubclass 的名称。VC 的 init 依赖于此类名称来加载其关联的 Nib ——因此当它被更改时它找不到 Nib 。通过调用 initWithNibName :bundle: 并明确提供相关 nib 正确加载的类名。)

关于objective-c - 在 iOS 4.3 上运行的 ARC 项目中,ViewController 没有从 nib 加载 subview ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9133843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com