簡體   English   中英

從App Delegate調用ViewController方法

[英]Call ViewController method from App Delegate

我的ViewController中有一個方法可以根據存在的引腳打開不同的視圖,將其分配給初始視圖上的按鈕時可以使用,我也可以將其放在viewDidLoad方法中,但是我正在使用情節提要,並且此方法的viewDidLoad會觸發每個視圖都是從模態選擇中加載的,所以我希望從我的appDelegate didFinishLaunchingWithOptions中調用該方法。 從本質上講,它是基於存儲的pin值在應用啟動時的視圖重定向。

我已經在應用程序委托#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方法以糾正此錯誤的任何想法? 謝謝

您需要向該方法添加一個參數,例如:

[rootViewController initView:nil];

您的-(IBAction)initView:(id)sender需要一個參數。

您有兩種方法可以解決此問題。

  • 將方法簽名修改為-(IBAction)initView { //source code. } -(IBAction)initView { //source code. }

  • 從調用者方法傳遞nil或AppDelegate

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM