2015-04-01 25 views
0

在我的應用程序中,有一個名爲「Home」的視圖控制器,其中有一個textField。 我在AppDelegate文件中閱讀了有關applicationDidEnterBackgroundapplicationWillTerminate方法。 我知道如何創建,保存,從文件中讀取數據。當應用程序關閉或終止時,將textField中的數據保存到文件中

我的問題是,怎樣才能從「Home」的viewController的NSString(有存儲textField數據)到AppDelegate applicationDidEnterBackground方法,並用這些數據做有我的所有的東西?

+0

的回答你的問題取決於你在做什麼真的很想做。 您試圖在主視圖控制器中訪問的NSString屬性?你是否需要保存應用程序委託中的NSString數據,或者是否可以在主視圖控制器中編寫一個方法來保存該NSString(例如,如果您從應用程序委託向所有觀察者發送了通知,以便保存數據) – 2015-04-01 17:56:20

+0

做這個通知的事情?我認爲這是我需要的。 @MichaelDautermann – Nir 2015-04-01 17:58:46

回答

1

您可以使用NSNotificationCenter在您的視圖控制器中註冊一個通知,該通知在您輸入applicationDidEnterBackground或applicationWillTerminate時觸發。

因此,在其中的任意一種方法,你把東西像

[[NSNotificationCenter defaultCenter] postNotificationName:@"someDescriptiveName" object:self userInfo:@{@"key" : @"value"}]; 

USERINFO期望一個NSDicitonary,你可以通過它的任何類型的對象,在那裏,你的情況,你不需要回從這裏通過什麼你的視圖控制器,你只是用它來讓你的視圖控制器知道應用程序正在關閉。

在視圖控制器,你能夠爲這一通知,像這樣

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(methodToCall:) name:@"someDescriptiveName" object:nil]; 

寄存器,然後只要你的appDelegate張貼通知,其註冊您的視圖控制器來監聽它會火過「methodToCall」這可以是你正確地做任何事情的一種方法,它需要一個nsnotification,然後讓你訪問nsdicitonary它的攜帶。

- (void)methodToCall:(NSNotification *)notif{ 
NSLog(@"methodToCall fired with data %@",[[notif userInfo]valueForKey:@"key"]);} 
0

你可以用這個幫助你的控制器內做到這一點:

-(id)init 
{ 
    if((self = [super init])) 
    { 
     [[NSNotificationCenter defaultCenter] addObserver:self 
                selector:@selector(appDidEnterBackground:) 
                 name:UIApplicationDidEnterBackgroundNotification 
                object:[UIApplication sharedApplication]]; 
    } 
    return self; 
} 

-(void)appDidEnterBackground:(NSNotification *)note { 
    NSLog(@"appDidEnterBackground"); 
} 

你也可以使用applicationWillTerminate到位UIApplicationDidEnterBackgroundNotification時的

相關問題