別のクラスからメソッドを呼び出そうとすると、いくつかの問題が発生します。これが私のコードです
Appdelegate.m
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
if ([url isFileURL]){
RootViewController *theview = [[RootViewController alloc] init];
[theview handleOpenURL:url];
}
return YES;
}
RootViewController.h
@interface RootViewController : UIViewController <UIWebViewDelegate>{
IBOutlet UIWebView* mainwebView;
}
- (void)handleOpenURL:(NSURL *)url;
@property (nonatomic, retain) UIWebView* mainWebView;
RootViewController.m
- (void)handleOpenURL:(NSURL *)url{
NSLog(@"Method handleOpenURL completed")
[mainwebView setDelegate:self];
[self.mainwebView loadRequest:[[NSurLRequest alloc] initWithURL:url];
[self performSelector:@selector(handleIt) withObject:nil afterDelay:3.0];
}
- (void)handleIt{
docView *docController = [[docView alloc] initWithNibName:nil bundle:nil];
[self presentModalViewController:docController animated:YES];
}
したがって、基本的には UIWebView を更新してから、appdelegate が handleOpenURL を呼び出すと、モーダル ビュー コントローラーを提示しようとしています。問題は、これらの両方 (webview の更新とビュー コントローラーの提示) がメソッド handleOpenURL で機能しないことです。それらはviewdidloadで完全に正常に機能します。これは、appdelegateから呼び出されるメソッドと関係があると私に思わせます。
WebView は、handleOpenURL メソッドからアクセスしたときに応答を拒否するだけで、モーダル ビュー コントローラーを提示するとエラーが発生します。
Warning: Attempt to present ... whose view is not in the window hierarchy!
ただし、viewdidload から (時間遅延セレクターを使用して) 提示された場合、モーダルビューは正常に動作します。
なぜこれが起こっているのか、または回避策についての説明をいただければ幸いです。ご協力いただきありがとうございます。