Xcode4 iOS7/XCode5-“;viewDidLoad";立即调用,而不是在;presentViewController“;被称为

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

我刚刚升级到XCode5和iOS7,现在我的应用程序已经停止工作

我正在基于当前视图的属性创建一个新视图,在显示它之前,我需要设置新视图的一些属性

以前,我是这样做的:-

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
之间的任何父/子关系?不是真的-我只是创建子视图,设置属性,调用它,然后从那里开始。没有故事板,没有万能的控制器,只要边做边做。这是一些非常有用的信息。这是常识吗?我不知道这会发生,这真是一件大事。