在 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 属性