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;

根视图控制器.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 调用的方法有关。

当从 handleOpenURL 方法访问时,webview 只是拒绝响应,当我呈现模态视图控制器时,我得到了错误

 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 在开始时和被指向时被调用,而不是一直被调用。
  • 您应该在模态视图加载时调用它,方法指针([self myFunctionNameHere];)可以正常工作。
  • 所以这是您没有正确访问应用程序委托。
  • 我认为你甚至不应该从 app-delegate 调用它,而是从你的 .m 调用它。

从您的 main(.m) 文件中调用它可以解决所有问题。

于 2012-09-23T22:20:29.930 回答