在 Xcode 4.3 中设置属性值不固定/viewDidLoad 被多次调用

Posted

技术标签:

【中文标题】在 Xcode 4.3 中设置属性值不固定/viewDidLoad 被多次调用【英文标题】:Setting property values not sticking / viewDidLoad being called multiple times in Xcode 4.3 【发布时间】:2012-02-19 22:19:17 【问题描述】:

所以这很奇怪。

我有一个财产:

@property (weak, nonatomic) Something *something; // .h
@synthesize something=_something                  // .m

由于某种原因,设置该属性不会保持_something 的设置。

我什至写了一个setter:

- (void)setSomething:(Something *)something 
    _something = something;

传递的something 是对象的有效实例。但是,在遍历_something = something 行之后,_something 为 nil,something 仍然是一个有效对象。

这让我发疯了,因为在我看来一切都是正确的。类似的东西我已经写了一千遍了。唯一的新功能是它在 Xcode 4.3 中。

任何帮助将不胜感激。谢谢!

ETA:所以,也许这是一个暗示? viewDidLoad 被称为一个完整的时间,每批 4 个。我正在使用情节提要,因此视图会自动正确设置。也许视图控制器没有正确加载或初始化或什么?我已经设置好了课程,一切看起来应该可以正常工作,但事实并非如此。

【问题讨论】:

从 Xcode 4.2 开始,您不需要在接口中定义 _something。它是自动完成的。 您是否在检查作业后立即尝试将 _something 发送到 NSLog?这将有助于在实际问题和调试器问题之间做出决定。 我做到了。是零。这就是让我发疯的原因。 我知道这可能无法解决问题,但请尝试将传递给 setter 的参数重命名为 somethingVal,如下所示:- (void)setSomething:(Something *)somethingVal _something=somethingVal; 【参考方案1】:

好的,我想通了。我不确定这个方法是从哪里来的,但这是在 SomethingViewControler 代码中:

- (void)loadView 
    // If you create your views manually, you MUST override this method and use it to create your views.
    // If you use Interface Builder to create your views, then you must NOT override this method.

因为我使用的是情节提要,所以这种方法的存在引起了各种各样的问题。我很尴尬,因为我可能不假思索地从某个地方复制并粘贴了它。

无论如何,我希望这对某人有所帮助。它只会杀死我一天中的大部分时间。

【讨论】:

请将此标记为答案,以便未来的访问者可以快速发现解决方案。毕竟,类似的事情也可能发生在其他人身上。 哦,是的。默认情况下取消注释(也称为覆盖)-(void)loadView 是一个非常烦人的想法。该方法来自 Xcode4.3 UIViewController 类模板。我浪费了 30 分钟来弄清楚为什么 ^&*#@!% viewDidLoad 被称为 5 #@^!& 次,之后视图仍然是空的。 %^&*$!苹果。 顺便说一句,我提交了一个错误。当我们不使用“为用户界面创建 XIB”时取消注释 -(void)loadView 的决定根本没有意义。他们引入了故事板作为做事的新方式,因此“没有 xib”。所以他们不应该强迫我在每次创建视图控制器时删除loadView。完全出乎意料的是,这种方法实际上是有效的。我浪费了将近一个小时。 DarkDust:只要允许,我就会将其标记为答案。在我能够这样做之前有两天的锁定。我猜想用 cmets 代替人们过早回答自己的问题,人们应该在无法回答时标记答案是付出的代价。【参考方案2】:

也许您分配给该属性的东西不是从其他任何地方指向的。所以在赋值之后,指向那个对象的唯一指针就是你的属性,它是 week 所以这个对象被扔出堆

【讨论】:

我试过让它变得更强大,但这也没有解决问题。 :-( 不过谢谢。

以上是关于在 Xcode 4.3 中设置属性值不固定/viewDidLoad 被多次调用的主要内容,如果未能解决你的问题,请参考以下文章

在 info plist 中设置“应用程序使用 WiFi”属性

更新到 Xcode7-beta4 后,无法在属性检查器中设置 UITableView 的 backgroundColor 属性

Xcode 4.3 停止构建 XIB 文件

在固定大小的表格中设置 JSF 列标题的宽度

在 Xcode 中设置 GCC 4.2.1 选项

在 Reactstrap 表中设置固定宽度