我想在我的主视图控制器中调用一个方法,当我的应用程序从URL方案接收打开时,我就可以处理它。
问题是我似乎无法从app委托调用ViewController方法。我注意到一些委托方法允许通知NSNotificationCentre
,但看起来openURL似乎不是其中之一。
我是否可以通过通知或标准方法调用从委托调用ViewController方法的其他方法?
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
答案 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)。