2015-06-05 66 views
1

嗨,我知道這個問題也許很愚蠢,但無論如何,我現在問它。如何在NSNotificationCenter事件發生後更新值?

我有這樣的功能:

- (int)getToday { 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"fa_IR"]; 

[dateFormatter setDateFormat:@"dd"]; 
int day = [[dateFormatter stringFromDate:[NSDate date]] intValue]; 


NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; 
[nc addObserver:self 
     selector:@selector(handleSysTimeChanged:) 
      name:NSSystemClockDidChangeNotification 
     object:nil]; 



return day; 

} 

之後,我處理通知如下:

-(void) handleSysTimeChanged: (NSNotification*) notification 
{ 


if (NSSystemClockDidChangeNotification) { 
    NSLog(@"%i", [self getToday]); 

} 


} 

,我得到正是我想在我的NSLog的變化。但之後,我怎麼能更新我的getToday在通知發生後顯示新號碼。 我是新來的objective-c和NSNotificationCenter。所以不要生氣。

+0

您不應該在'getToday'方法內設置通知,因爲您很可能會多次調用該方法。您只想設置一次通知。並使用'NSCalendar'和'NSDateComponents'來代替使用'NSDateFormatter'來獲取當天。 – rmaddy

+0

我沒有明白你的意思。我曾經把通知放在我的ApplicationDidFinishLaunching中,並在AppDelegate中處理,並得到相同的結果,但我不知道如何改變我的getToday中的值。順便說一句'NSDateFormatter'對我現在的測試來說很好。 – Armin

回答

0

首先,正如@rmaddy所說,你不應該觀察getToday中的通知。這裏這段​​代碼的問題是:

[nc addObserver:self 
     selector:@selector(handleSysTimeChanged:) 
      name:NSSystemClockDidChangeNotification 
     object:nil]; 

你只需要設置你的觀察一次,如果你每個電話通知getToday,它會被稱爲一噸的時候。重複調用addObserver調用CAN會破壞事物。在applicationDidFinishLaunchingWithOptions或你的類的初始化方法中設置此項。另外,不要忘記在應用程序終止之前調用removeObserver,否則會出現一些非常奇怪的錯誤。其次,我不認爲你在做什麼被打破。根據您提供的代碼,每次收到通知時,您都會收到當前的日期和[NSDate date]。這應該爲您提供所需的正確日期。

+0

謝謝@ taylorc93,我改變了我的'NC'的位置,但我遇到的最大問題是如何更改'getToday'返回的值或我如何更新當前顯示'getToday'值的標籤。 – Armin

相關問題