0

以下代码是我在应用程序收到特定本地通知时显示视图控制器的最新尝试:

- (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 方法中?

如果一切都失败了,您可以随时从父视图控制器手动调用 viewDidAppear :)

希望这可以帮助!

于 2012-08-30T11:19:16.270 回答