如何从app delegate

时间:2016-04-16 12:21:46

标签: objective-c uiviewcontroller appdelegate instance-variables

我有一个NSMutablearray,我想在应用程序进入后台时保存到文件。我在我的Viewcontroller.h中将我的NSMutablearray声明为实例变量:

#import <UIKit/UIKit.h>

NSString *docPath();

@interface ViewController : UIViewController<UITableViewDataSource>

{
    UITableView *taskTable;
    UITextField *taskField;
    UIButton *insertButton;

    NSMutableArray *tasks;

}

- (void)addTask:(id)sender;


@end

现在我需要在AppDelegate中访问此变量,如下所示:

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

    [tasks writetofile:docPath() atomically:YES];

}

我对此很新,并且自学成才。我认为AppDelegate中的某种#import“Viewcontroller.h”会有所帮助,但不知道如何继续。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

您可以注册viewcontroller以获取后台通知。这里没有Appdelegate。

- (void)viewDidLoad{
    [super viewDidLoad];

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

- (void)applicationDidEnterBackground:(UIApplication *)application {
    [tasks writetofile:docPath() atomically:YES];
}

编辑:

或者您可以迭代navigation stack以在AppDelegate中获取您的viewcontroller实例。

UINavigationController *navigationController = [self.window rootViewController];

for (UIViewController *viewController in navigationController.viewControllers) {
    if (viewController isKindOfClass:[YOUR_CONTROLLER class]) {

        YOUR_CONTROLLER *yourController =  (YOUR_CONTROLLER *)viewController;

        //Do your code using yourController instance
    }
}

注意:以上代码基于您的rootviewcontroller是UINavigationController的假设