3

application:didFinishLaunchingWithOptions:初期化しUINavigationControllerます。後で、UINavigationControllerウィンドウにを追加します。

[self.window addSubview:navigationController.view]

これはすべて正常に機能します。ここで、アプリにローカル通知を追加しました。ユーザーが通知に応答したときに、を表示したいと思いUIViewControllerます。だから私はオーバーライドできると思いapplication:didReceiveLocalNotification:ました、そしてそこで、私の:を使用してnavigationControllerください

[navigationController pushViewController:someVC animated:YES];

ただし、これは機能しません。デバッグを行ったところ、が表示されていないのにスーパービューnavigationControllerがないことnilに気づきました。表示されていないと思います。navigationController.view

だから、私の質問は、UIViewControllerそれが表示されるようにどこにプッシュする必要があるかということです。

4

2 に答える 2

5

AppDelegate.hに次を追加します。

//Under where you have <UIKit/UIKit.h>
extern NSString *localReceived;

AppDelegate.mに次を追加します。

//All the way on top where you import your viewControllers
NSString *localReceived = @"localReceived";

メソッドのAppDelegate.mに次を- (void)application:(UIApplication *)app didReceiveLocalNotification:(UILocalNotification *)localNotification; 追加します。

        [[NSNotificationCenter defaultCenter] postNotificationName:localReceived object:self];

viewControllerがnavigationControllerであることを確認してください

そうでない場合は、次のようにします-このコードをあなたの- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions:に追加します

    UINavigationController *nvcontrol = [[UINavigationController alloc] initWithRootViewController:viewController];

[window addSubview:nvcontrol.view];
[window makeKeyAndVisible];

次に、viewController.mでこれを-viewDidLoad関数に追加します

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(localAction) name:localReceived object:nil];

-(void)localActionを作成し、そのメソッドにnavigationControllerコードを追加して、次のViewControllerにプッシュします。

それがあなたのために働くことを願っています。私にとっては魅力のように機能します

于 2011-05-16T17:20:59.827 に答える
2

これが、別のアプローチによる別のソリューションです。それは私にとって魅力のように機能しました。見てみな:

- (void)application:(UIApplication *)app didReceiveLocalNotification:(UILocalNotification *)localNotification{
    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    CustomViewController *cvc = (CustomViewController *)[storyboard instantiateViewControllerWithIdentifier:@"CustomVC"];
    AnotherViewController *avc = (AnotherViewController *)[storyboard instantiateViewControllerWithIdentifier:@"AnotherVC"];
    avc.someValue = @"Passing a value"; //Optional
    UINavigationController *nav = (UINavigationController *) self.window.rootViewController;
    nav.viewControllers = [NSArray arrayWithObjects:cvc,avc, nil];
    [(UINavigationController *)self.window.rootViewController popToViewController:avc animated:TRUE];
    [[UIApplication sharedApplication] cancelLocalNotification:localNotification]; 
    //Cancel Just for not showing it anymore on the notifications list...
}
于 2013-02-18T23:41:46.653 に答える