我有一个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”会有所帮助,但不知道如何继续。任何帮助表示赞赏。
答案 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的假设