【问题标题】:iOS7 / XCode5 - "viewDidLoad" called at once, rather than when "presentViewController" was callediOS7 / XCode5 - 一次调用“viewDidLoad”,而不是在调用“presentViewController”时
【发布时间】:2013-09-28 02:42:58
【问题描述】:

我刚刚升级到 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 中的一个新设置导致了这种变化,或者我是否必须重写它来做我需要的事情做什么?

【问题讨论】:

  • 你可以在 viewWillAppear 中移动代码
  • 我考虑过这一点,但有时我会从这个视图转到另一个视图,然后再回到这个会触发两次的视图。这似乎过度和烦人。
  • 我尝试删除 [self presentViewController] 代码,它仍然在任何属性分配之前触发 [viewDidLoad]。
  • 你总是可以添加一个 didInitialize BOOL ivar 来只运行一次代码

标签: xcode4 ios7 viewdidload xcode5


【解决方案1】:

你不知道viewDidLoadviewWillAppear等什么时候会被调用。

我的建议:为您的控制器创建一个专用的 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

【讨论】:

  • 我希望避免这种情况,因为有些时候我必须设置五个或六个变量。但是这样做至少比在 viewWillAppear 中这样做要好:)
  • 我不明白为什么它突然变了?还是只是运气不好,它在 iOS6/XCode4 下每次都有效,而在 iOS7/XCode5 下根本无效?
  • 还是谢谢你 - 我会投票给你答案,但我显然还没有足够的分数 - 抱歉!
  • 确实,viewDidLoad 被调用是很有趣的,即使 presentViewController 被评论...你定义你的 viewcontrollersyourself 之间的任何父/子关系吗?
  • 不是真的 - 我只是创建子视图,设置属性,调用它,然后从那里开始。没有故事板,没有全能的控制器——只要我去创建它们。
【解决方案2】:

在 init 方法之前调用的 viewDidLoad 方法上设置断点,您将能够看到导致调用 viewDidLoad 的原因。您可能会发现它正在被调用,因为该视图已被其他代码引用。这最常发生在超类中(例如,如果您有一个 UIViewController 超类为您的视图控制器实现通用功能)。例如,如果您不小心将新代码放入访问的 self.view 超类中的方法中,例如 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 你会注意到这种行为。因此,请确保您没有在任何代码中访问视图。 -rrh

【讨论】:

  • 这是一些非常有用的信息。这是常识吗?我不知道这会发生,这真的是一件大事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-09
  • 2016-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多