3

XCode5 と iOS7 にアップグレードしたところ、アプリケーションが動作しなくなりました。

現在のビューのプロパティに基づいて新しいビューを作成していますが、表示する前に新しいビューのいくつかのプロパティを設定する必要があります。

以前、私はこのようにしました:-

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]
}

ただし、ビューを作成するとすぐに [viewDidLoad] メソッドがトリガーされます。つまり、[viewDidLoad] が呼び出される前にプロパティを設定できないため、実際に必要なものに関係なく常に list2 をロードします。

問題は、これは iOS6 では発生しなかったため、XCode5 の新しい設定が原因でこれが変更されたのか、それとも必要なことを行うために書き直さなければならないのか疑問に思っていることです。

4

2 に答える 2

1

init メソッドの前に呼び出されている viewDidLoad メソッドにブレークポイントを設定すると、viewDidLoad が呼び出される原因を確認できます。ビューが他のコードによって参照されたために呼び出されていることに気付くでしょう。これはほとんどの場合、スーパー クラスで発生します (View Controller に共通の機能を実装する UIViewController スーパークラスがある場合など)。たとえば、(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil などのスーパークラスのメソッドで、アクセスした s​​elf.view に誤って新しいコードを入れた場合、この動作に気付くでしょう。したがって、必要になる前に、どのコードでもビューにアクセスしていないことを確認してください。-r

于 2013-09-30T17:05:29.933 に答える