我刚刚升级到 XCode5 和 iOS7,现在我的应用程序已停止工作。
我正在基于当前 View 的属性创建一个新 View ,并且在显示新 View 之前我需要设置它的一些属性。
以前,我是这样做的:-
hqView *v = [[hqView alloc] initWithNibName:NULL bundle:NULL];
[v setProperty1:true];
[v setProperty2:false];
[self presentViewController:v animated:TRUE completion:NULL];
这随后触发了 View Controller 上的 [viewDidLoad] 方法,其中包含以下代码:-
if ([self property1])
{
[list1 load]
}
else
{
[list2 load]
}
但是现在,一旦我创建 View ,[viewDidLoad]方法就会触发,这意味着我无法在调用[viewDidLoad]之前设置属性,因此无论我实际想要什么,它总是加载list2。
问题是 - 这在 iOS6 下没有发生,所以我想知道是否是 XCode5 中的新设置导致了这种情况的改变,或者我是否必须重写它来完成我需要它做的事情做什么?
最佳答案
您无法知道何时调用 viewDidLoad
、viewWillAppear
等。
我的建议:为您的 Controller 创建一个专用的 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
关于xcode4 - iOS7/XCode5 - 立即调用 "viewDidLoad",而不是在调用 "presentViewController"时调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18955249/