嗨我知道这个问题可能很愚蠢,但无论如何我现在都会问它。
我有这个功能:
- (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 :(得分:0)
首先,正如@rmaddy所说,你不应该注意getToday
内的通知。这里的代码是问题所在:
[nc addObserver:self
selector:@selector(handleSysTimeChanged:)
name:NSSystemClockDidChangeNotification
object:nil];
您只需要设置一次观察者,如果您在每个通知上拨打getToday
,它就会被调用很多次。重复的addObserver
调用会破坏事物。在applicationDidFinishLaunchingWithOptions
或您班级的初始化方法中进行设置。另外,在您的申请终止之前不要忘记致电removeObserver
,否则您会收到一些非常奇怪的错误。
其次,我不认为你所做的事情已被打破。根据您提供的代码,每次收到通知时,您都会获得当前日期[NSDate date]
。这应该为您提供所需的正确日期。