从App Delegate调用ViewController方法

时间:2014-07-25 02:03:40

标签: ios objective-c uiviewcontroller

我的ViewController中有一个方法可以根据存在的引脚打开不同的视图,它在分配给初始视图中的按钮时有效,我也可以将它放在viewDidLoad方法中但是我使用的是storyboard和这个方法viewDidLoad从模态segues中触发每个视图加载,所以我想从我的appDelegate didFinishLaunchingWithOptions调用该方法。 它基本上是基于存储的引脚值存在的应用程序启动时的视图重定向。

我在app delegate #import "ViewController.h"中导入了视图控制器 然后使用didFinishLaunchingWithOptions中的当前代码:

ViewController *rootViewController = (ViewController*)self.window.rootViewController;
[rootViewController initView];

我这样做但是我收到了错误

没有'ViewController'的可见界面声明选择器'initView'?

这是我的完整ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController {

IBOutlet UITextField *emailField;
IBOutlet UITextField *passwordField;
IBOutlet UITextField *pinField;
IBOutlet UITextField *checkPin;

}

@property (nonatomic, strong) IBOutlet UIWebView *webView;
@property (strong, nonatomic) IBOutlet UIBarButtonItem *ShowEmailList;
-(IBAction)showList:(id)sender;

-(IBAction)checkPin:(id)sender;
-(IBAction)initView:(id)sender;

@end

并在我的ViewController.m文件中使用方法:

-(IBAction)initView:(id)sender {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString *getPin = [defaults objectForKey:@"Pin"];
    if ([getPin isEqualToString:@""]){
        //do something
    }else{
        //do something else
    }
}

有关如何在ViewController.h文件中正确声明我的initView方法以纠正此错误的任何想法? 感谢

2 个答案:

答案 0 :(得分:1)

您需要为此方法添加一个参数,如:

[rootViewController initView:nil];

答案 1 :(得分:1)

您的-(IBAction)initView:(id)sender期待参数。

您有两种方法可以解决此问题。

  • 将您的方法签名修改为-(IBAction)initView { //source code. }

  • 传递nil或来自调用者方法的AppDelegate

    [rootViewController initView:nil];[rootViewController initView:self];