0

次のコードは、アプリケーションが特定のローカル通知を受信したときに View Controller を表示する最新の試みです。

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{
    NSLog(@"Notification Received.  UserInfo: %@", [notification.userInfo valueForKey:@"notificationType"]);
    if ([[notification.userInfo valueForKey:@"notificationType"] isEqualToString:@"backup"])
    {
        NSLog(@"Backup notification received.");
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        [defaults setObject:@"Yes" forKey:@"shouldBackup"];
        [defaults synchronize];
        SettingsViewController *vc = [self.window.rootViewController.tabBarController.viewControllers objectAtIndex:3];
        [self.window.rootViewController.tabBarController.navigationController pushViewController:vc animated:NO];
    }
    else
    {
        NSLog(@"Did receive notification: %@, set for date:%@ .", notification.alertBody, notification.fireDate);
    }
}

次に、viewDidAppear メソッドで使用する次のコードを使用して、バックアップを実行するかどうかを決定します。

if ([[defaults objectForKey:@"shouldBackup"] isEqualToString:@"Yes"]){
        [defaults setObject:@"No" forKey:@"shouldBackup"];
        [defaults synchronize];

        HUD = [[MBProgressHUD alloc] initWithView:self.navigationController.view];
        [self.navigationController.view addSubview:HUD];

        HUD.delegate = self;
        HUD.labelText = @"Backing Up Your Data..";
        HUD.minSize = CGSizeMake(135.f, 135.f);

        [HUD showWhileExecuting:@selector(performBackup) onTarget:self withObject:nil animated:YES];
    }

しかし、viewDidAppear が呼び出されないように見えます。誰かが私が間違っていることを説明できますか? 私は今、いくつかの異なるアプローチを試しましたが、それを機能させることができないようです..

ありがとう、

タイシン

4

1 に答える 1

1

デリゲート メソッドを呼び出すには、SettingsViewController を NavigationController からスタックにプッシュする必要があります (この場合は viewDidAppear)。ルート ビュー コントローラーは TabBarController のようです。この場合、UINavigationControllerDelegate をルート VC に追加します。次に何をすべきかの詳細については、http://www.touchthatfruit.com/viewwillappear-and-viewdidappear-not-being-caを参照してください。

また、viewDidAppear が呼び出されていないか、その中のコードだけが呼び出されていませんか? 調べるためにブレークポイントを追加します。

最後に、[super viewDidAppear:animated] はありますか。SettingsViewController の viewDidAppear メソッドで?

他のすべてが失敗した場合は、いつでも親View ControllerからviewDidAppearを手動で呼び出すことができます:)

お役に立てれば!

于 2012-08-30T11:19:16.270 に答える