如何从AppDelegate.m调用ViewController.m方法

时间:2014-01-25 17:09:36

标签: objective-c viewcontroller appdelegate

在我的ViewController.m中,我的空白“保存数据”:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
@synthesize myDatePicker, myTextField;

-(void)saveData
{
NSArray *value = [[NSArray alloc] initWithObjects:[myTextField text],[myDatePicker date], nil];
[value writeToFile:[self getFilePath] atomically:YES];

}

我想在我的AppDelegate.m中使用我的虚空“保存数据”:

- (void)applicationDidEnterBackground:(UIApplication *)application
{

[self.ViewController saveData];

}

但Xcode无法识别“ViewController”也不识别“saveData”。

我不知道是否必须在我的AppDelegate中#import,请帮忙。

2 个答案:

答案 0 :(得分:1)

如何从app delegate访问viewcontroller将取决于你拥有多少个viewcontrollers /它在当前导航层次结构中的位置等等。你可以为它添加一个属性,或者它可能是你的app delegate { {1}}。

但是,当应用程序进入后台时,您最好在viewcontroller中侦听通知。这意味着您需要的逻辑可以完全自包含在您的viewcontroller中,而您的app委托不需要了解它。

在viewcontroller的初始化方法中,您可以注册接收通知:

rootViewController

然后,实现方法:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(applicationDidEnterBackground:)
                                             name:UIApplicationDidEnterBackgroundNotification
                                           object:nil];

并确保您在viewcontroller的- (void)applicationDidEnterBackground:(NSNotification *)notification { [self saveData]; } 方法中以观察者身份移除自己:

dealloc

答案 1 :(得分:0)

在顶部的“appDelegate.m”实施文件中执行此导入 - >

#import "ViewController.h"

这将使自定义类ViewController对appDelegate可见。

为了能够从另一个类调用 - (void)saveData方法(在我们的例子中,另一个类是AppDelegate类),需要在公共接口中声明此方法。这意味着 - >

#import "ViewController.h"


@interface ViewController ()

-(void)saveData;

@end