【问题标题】:Setting property values not sticking / viewDidLoad being called multiple times in Xcode 4.3在 Xcode 4.3 中设置属性值不固定/viewDidLoad 被多次调用
【发布时间】: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;}

标签: objective-c ios xcode properties xcode4.3


【解决方案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 所以这个对象被扔出堆

【讨论】:

  • 我试过让它变得更强大,但这也没有解决问题。 :-( 不过谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多