NSNotificationCenter事件发生后如何更新值?

时间:2015-06-05 22:08:05

标签: ios objective-c cocoa-touch 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的新手。所以不要生气。

1 个答案:

答案 0 :(得分:0)

首先,正如@rmaddy所说,你不应该注意getToday内的通知。这里的代码是问题所在:

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

您只需要设置一次观察者,如果您在每个通知上拨打getToday,它就会被调用很多次。重复的addObserver调用会破坏事物。在applicationDidFinishLaunchingWithOptions或您班级的初始化方法中进行设置。另外,在您的申请终止之前不要忘记致电removeObserver,否则您会收到一些非常奇怪的错误。

其次,我不认为你所做的事情已被打破。根据您提供的代码,每次收到通知时,您都会获得当前日期[NSDate date]。这应该为您提供所需的正确日期。