31

私のアプリの 1 つで、application didReceiveLocalNotificationメソッドから viewController を呼び出しています。ページは正常に読み込まれますが、次のような警告が表示されます。

 Warning: Attempt to present <blankPageViewController: 0x1fda5190> on 
 <ViewController: 0x1fd85330> whose view is not in the window hierarchy!

私のコードは次のとおりです。

 -(void) application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {

    blankPageViewController *myView = [[blankPageViewController alloc] 
               initWithNibName:@"blankPageViewController" bundle: nil];
    myView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self.viewController presentViewController:myView animated:NO completion:nil];  
}
4

9 に答える 9

21

最後に、次のコードでその問題を解決しました。

-(void) application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
       self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
       self.blankviewController = [[blankPageViewController alloc] initWithNibName:@"blankPageViewController" bundle:nil];
       self.window.rootViewController = self.blankviewController;
       [self.window makeKeyAndVisible];
}
于 2013-03-12T11:51:51.120 に答える
15

置く

[self.viewController presentViewController:myView animated:NO completion:nil];  

関数に

- (void)yourNewFunction
{
    [self.viewController presentViewController:myView animated:NO completion:nil];
}

そして、次のように呼び出します。

[self performSelector:@selector(yourNewFunction) withObject:nil afterDelay:0.0];

問題はここで説明されていますが、なぜperformSelector:withObject:afterDelayこれで問題が解決するのですか? セレクターは実行ループの次の実行まで呼び出されないためです。そのため、物事が落ち着く時間があり、1 つの実行ループをスキップするだけです。

于 2013-11-20T01:41:36.147 に答える
14

私の推測では、ウィンドウ階層に接続または配置される前myViewから提示しようとしているように感じます。そのため、ウィンドウに表示/添付された後に提示するようにしてください。self.viewControllerself.viewControllermyViewself.viewController

モーダルView ControllerがviewDidLoadで別のものを提示できないのはなぜですか?

于 2013-03-08T06:13:54.947 に答える
2

VCが表示されているときに、viewcontrollerのビューが現在ウィンドウ階層にロードされていないことが原因である可能性があります...

-(void) application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    UINavigationController *navigationController = (UINavigationController*) self.window.rootViewController;
    rootViewController = [[navigationController viewControllers] objectAtIndex:0];
    blankPageViewController *myView = [[blankPageViewController alloc] initWithNibName:@"blankPageViewController" bundle: nil];
    [rootViewController presentModalViewController:myView animated:YES];
}
于 2013-03-08T06:04:43.720 に答える
0

私はSwift 2.0オーバーライドを使用しましviewDidAppearた:

let vc = self.storyboard?.instantiateViewControllerWithIdentifier("Second") as! SecondViewController

self.presentViewController(vc, animated: true, completion: nil)

ここで、"Second" は、ID インスペクターの SecondViewController のストーリーボード ID です。

于 2015-12-09T05:51:43.147 に答える
0
I have used Navigation Controller and on which i have used a
ModalViewController to present a Popup(Present over current context). 
From this Popup i am opening a ViewController Modally which 
caused the Warning. So to resolve i did below change:

[self.presentedViewController performSegueWithIdentifier:@"PresentScreenSegueId" sender:sender];
于 2016-06-03T07:35:21.950 に答える
0

アプリケーション タイプ ID UINavigationController の場合は、使用できます。

-(void) application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {

blankPageViewController *myView = [[blankPageViewController alloc]
                                   initWithNibName:@"blankPageViewController" bundle: nil];
myView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self.navigationController presentViewController:myView animated:NO completion:nil]; }

これがあなたを助けることを願っています。ではごきげんよう !!!

于 2013-03-08T06:03:10.330 に答える