NSNotificationCenter for application:openURL

时间:2014-12-16 22:18:10

标签: ios objective-c

我想在我的主视图控制器中调用一个方法,当我的应用程序从URL方案接收打开时,我就可以处理它。

问题是我似乎无法从app委托调用ViewController方法。我注意到一些委托方法允许通知NSNotificationCentre,但看起来openURL似乎不是其中之一。

我是否可以通过通知或标准方法调用从委托调用ViewController方法的其他方法?

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

1 个答案:

答案 0 :(得分:1)

直接致电。好吧,我解释一下:我想你比使用故事板,并且你没有在AppDelegate中引用你的viewController。

现在,你说过你可以在你的MainViewController中触发一个方法,很可能你的MainViewController在UINavigationController里面(或者没有),我将在这个例子中调用这个mainController:MainViewController。

MainViewController.h(界面)中的第一件事就是让你想要公开的方法公开,例如。

@interface MainViewController : UIViewController

-(void)wakeUpFromUrlWithParameters:(NSDictionary *)parameters;

现在在你的AppDelegate.m中,导入你的mainViewController,

#import "AppDelegate.h"
#import "MainViewController.h"

@implementation AppDelegate

您可以看到您的appDelegate有一个属性调用窗口。好吧,在appDelgate的任何方法中,您都可以使用此窗口属性。

如果你的mainViewController在UINavigationController中,你需要这样做:

UINavigationController *navController = (UINavigationController *)self.window.rootViewController;

MainViewController *mainViewController = (MainViewController *)[navController.viewControllers firstObject];

// And you can call you methods also with a dict of parameters o any other thing

[mainViewController wakeUpFromUrlWithParameters:nil];

如果你的mainViewController是root(没有导航控制器很简单)

 MainViewController *mainViewController = (MainViewController *)self.window.rootViewController;

 // And you can call you methods also with a dict of parameters o any other thing

 [mainViewController wakeUpFromUrlWithParameters:nil];

当然,NotificationCenter是另一种选择。 (你有userInfo)。