从另一个类调用方法,uiwebview 和模态视图问题

Posted

技术标签:

【中文标题】从另一个类调用方法,uiwebview 和模态视图问题【英文标题】:Calling method from another class, uiwebview and modal view issues 【发布时间】:2012-09-23 19:41:06 【问题描述】:

我在尝试从另一个类调用方法时遇到了一些问题。这是我的代码

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 调用的方法有关。

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

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

但是,当从 viewdidload(使用时间延迟选择器)呈现时,模态视图再次正常工作

解释为什么会发生这种情况或解决方法会很好,感谢您的帮助。

【问题讨论】:

当我从应用委托调用方法时,它是否与使用“自我”有关? 【参考方案1】:

您必须在您的RootViewController.m 中添加#import "docView.h"

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

警告指出视图未被识别,这意味着您无法正确访问该类,如果它没有导入,那么您没有正确设置 docView.m 中的代码。

如果这不起作用,我需要更多信息来帮助解决您的问题。


编辑澄清:

app-delegate 在开始时被调用,当被指向时,不是 不断。 您应该在模态视图加载时调用它,一个方法 pointer([self myFunctionNameHere];) 可以正常工作。 所以这是您没有正确访问应用程序委托。 我认为您甚至不应该从应用程序委托中调用它, 从您的 .m. 调用它。

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

【讨论】:

所以,我的 docView.h 已正确导入,我知道这一点,因为当我从 rootviewcontroller 的 viewdidload 呈现模式时,它工作正常。问题是当我尝试使用我的 appdelegate 调用的方法来呈现模式时。

以上是关于从另一个类调用方法,uiwebview 和模态视图问题的主要内容,如果未能解决你的问题,请参考以下文章

如何从模态视图控制器调用呈现视图控制器的方法

UIWebView 部分可操作

从另一个类创建超级视图的子视图不起作用

我可以从另一个模态视图控制器中推送模态视图控制器吗?

如何从另一个类调用 invalidate() 方法?

从另一个视图调用一个类