Xcode4 iOS7/XCode5-“;viewDidLoad";立即调用,而不是在;presentViewController“;被称为
我刚刚升级到XCode5和iOS7,现在我的应用程序已经停止工作 我正在基于当前视图的属性创建一个新视图,在显示它之前,我需要设置新视图的一些属性 以前,我是这样做的:-Xcode4 iOS7/XCode5-“;viewDidLoad";立即调用,而不是在;presentViewController“;被称为,xcode4,ios7,viewdidload,xcode5,Xcode4,Ios7,Viewdidload,Xcode5,我刚刚升级到XCode5和iOS7,现在我的应用程序已经停止工作 我正在基于当前视图的属性创建一个新视图,在显示它之前,我需要设置新视图的一些属性 以前,我是这样做的:- hqView *v = [[hqView alloc] initWithNibName:NULL bundle:NULL]; [v setProperty1:true]; [v setProperty2:false]; [self presentViewController:v animated:TRUE completio
hqView *v = [[hqView alloc] initWithNibName:NULL bundle:NULL];
[v setProperty1:true];
[v setProperty2:false];
[self presentViewController:v animated:TRUE completion:NULL];
然后触发视图控制器上的[viewDidLoad]方法,其中包含以下代码:-
if ([self property1])
{
[list1 load]
}
else
{
[list2 load]
}
但是现在,只要我创建视图,[viewDidLoad]方法就会触发,这意味着我无法在调用[viewDidLoad]之前设置属性,因此无论我实际想要什么,它总是加载list2
问题是-这在iOS6下没有发生,所以我想知道是不是XCode5中的一个新设置导致了这一变化,还是我必须重写它来完成我需要它做的事情?你无法知道
viewDidLoad
,视图何时会出现,等等。。。将被调用
我的建议:为您的控制器创建一个专用的init方法,例如:
@implementation hqView
- (instancetype)initWithProperty1:(BOOL)prop1 property2:(BOOL)prop2
{
// uses default NIB
self = [super initWithNibName:nil bundle:nil];
if (self){
[self setProperty1:prop1];
[self setProperty2:prop2];
}
return self;
}
@end
在初始化方法之前调用的viewDidLoad方法上设置断点,您将能够看到调用viewDidLoad的原因。您可能会发现调用它是因为该视图被其他代码引用。这通常发生在一个超类中(例如,如果您有一个UIViewController超类,它实现了视图控制器的公共功能)。例如,如果您意外地将新代码放在访问的self.view的超类中的方法中,例如-(id)initWithNibName:(NSString*)nibNameOrNil bundle:(NSBundle*)nibBundleOrNil
你会注意到这种行为。因此,在您想要访问视图之前,请确保您没有在任何代码中访问该视图-rrh你可以在视图中移动代码Willapeari认为,但有时我会从这个视图移动到另一个视图,然后返回到这个视图,这会触发它两次。这似乎有些过分和烦人。我尝试删除[self-presentViewController]代码,但它仍然会在任何属性分配之前触发[viewDidLoad]。只有在我希望避免这种情况的情况下,才可以添加didInitialize BOOL ivar来运行代码,因为在某些情况下我必须设置五到六个变量。但这样做比在视图中做要好得多,至少会出现:)我不明白的是为什么它突然改变了?或者它只是愚蠢的运气,在iOS6/XCode4下每次都有效,而在iOS7/XCode5下根本不起作用?无论如何,谢谢你-我会投票支持你的答案,但我显然还没有足够的分数来这么做-对不起!事实上,调用viewDidLoad
非常有趣,即使presentViewController
被注释了。。。您是否自己定义了viewcontrollers
之间的任何父/子关系?不是真的-我只是创建子视图,设置属性,调用它,然后从那里开始。没有故事板,没有万能的控制器,只要边做边做。这是一些非常有用的信息。这是常识吗?我不知道这会发生,这真是一件大事。