0

別のクラスからメソッドを呼び出そうとすると、いくつかの問題が発生します。これが私のコードです

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 から (時間遅延セレクターを使用して) 提示された場合、モーダルビューは正常に動作します。

なぜこれが起こっているのか、または回避策についての説明をいただければ幸いです。ご協力いただきありがとうございます。

4

1 に答える 1

0

あなたはあなたの中にいる必要が#import "docView.h"ありますRootViewController.m

 Warning: Attempt to present ... whose view is not in the window hierarchy!

警告は、ビューが認識されないことを示しています。つまり、クラスに適切にアクセスできないことを意味します。インポートされていない場合は、コードをdocView.m適切に設定していません。

それでもうまくいかない場合は、問題を解決するためにさらに情報が必要です。


明確化のために編集:

  • app-delegate は、常にではなく、開始時と指定されたときに呼び出されます。
  • モーダル ビューがロードされたときに呼び出す必要があります。メソッド pointer([self myFunctionNameHere];) は正常に機能します。
  • つまり、app-delegate に適切にアクセスしていないということです。
  • app-delegate から呼び出す必要さえないと思います。.m から呼び出します。

main(.m) ファイルから呼び出すと、すべてが解決します。

于 2012-09-23T22:20:29.930 に答える