0

loggerViewController.m で:

- (void)viewDidLoad
{
    [super viewDidLoad];
    UIView* mainView = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    [self.view addSubview:mainView]; // <-- Problem is here
}

loggingViewController は私の appDelegate の iVar です

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    .
    .
    loggingViewController = [[loggerViewController alloc] init];
    [loggingViewController.view setBackgroundColor:[UIColor blueColor]];
//    [loggingViewController loadView];
    [self.view addSubview:loggingViewController.view];

}

私は AppDelegate が loggingViewController を呼び出すことを期待していました。これにより、内部に独自のサブビューが設定され、完了します。しかし、代わりに viewDidLoad が再帰的に呼び出される理由がわかりませんか?

4

1 に答える 1

1

このようにしてみて、

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    loggingViewController = [[loggerViewController alloc] init];
    self.window.rootViewController = loggingViewController;
    [self.window makeKeyAndVisible];
}

再帰呼び出しの理由は、あなたself.viewnilそうであるため、appdelegate のビューのサブビューとして追加しようとしているときに、何度も呼び出しを試みているためです。

- (void)viewDidLoad
{
    [super viewDidLoad];
    UIView* mainView = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    [self.view setBackgroundColor:[UIColor blueColor]];
    [self.view addSubview:mainView];
}
于 2012-11-23T01:01:47.757 に答える