从appdelegate调用viewcontroller中的一个函数



我想从我的appDelegate调用viewController中的函数,但使用以下代码,它不会被调用。我做错了什么?

AppDelegate.h:

#import <UIKit/UIKit.h>
#import "DetailsToTransfer.h"
@class AccountDetailTransferViewController;
@interface AccountDetailTransferAppDelegate : NSObject <UIApplicationDelegate> {
    DetailsToTransfer *objDetailsToTransfer;
}
@property (nonatomic, retain) DetailsToTransfer *objDetailsToTransfer;
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet AccountDetailTransferViewController *viewController;
-(void)sendToTransferScreen:(NSArray *)detailsArray;
@end

AppDelegate.m:

....
-(void)sendToTransferScreen:(NSArray *)detailsArray {

    [objDetailsToTransfer setLabels:detailsArray];
    objDetailsToTransfer = [[DetailsToTransfer alloc]initWithNibName:@"DetailsToTransfer" bundle:nil];
    [self.window addSubview:objDetailsToTransfer.view];
}

DetailsToTransfer.h:

#import <UIKit/UIKit.h>
@interface DetailsToTransfer : UIViewController {
    NSArray *accountDetailsArray;
    UILabel *nameLabel;
    UILabel *accountLabel;
    IBOutlet UIButton *btnTransfer;
    IBOutlet UIButton *btnBack;
}
@property (nonatomic, retain) NSArray *accountDetailsArray;
@property (nonatomic, retain) IBOutlet UILabel *nameLabel;
@property (nonatomic, retain) IBOutlet UILabel *accountLabel;
-(IBAction)sendDetails;
-(IBAction)goBack;
-(void)setLabels:(NSArray *)array;
@end

DetailsToTransfer.m

....
-(void)setLabels:(NSArray *)array {
    NSLog(@"Setting Labels");
    self.nameLabel.text = [array objectAtIndex:0];
    self.accountLabel.text = [array objectAtIndex:1];
}
....

我想补充的是,所有的属性都已经合成,并且我正在正确地调用appDelegate中的方法(我使用NSLogs检查)

In AppDelegate.m:

看起来好像你在对象被创建之前调用了一个方法。在alloc/init对象之前,不会有标签来设置文本。

试着把你的方法改成这样:

-(void)sendToTransferScreen:(NSArray *)detailsArray {
     if (!objDetailsToTransfer) {
         objDetailsToTransfer = [[DetailsToTransfer alloc]initWithNibName:@"DetailsToTransfer" bundle:nil];
         [objDetailsToTransfer setLabels:detailsArray];
         [self.window addSubview:objDetailsToTransfer.view];
    }
}

问题可能是您试图在尚未创建的对象上设置值。我还提供了一个if语句来防止多次创建对象。

最新更新