我有一个计时器的某一个日期我今天部件倒计时。我从我的视图控制器收集日期,然后在扩展中启动计时器,然后从三个标签中显示日期,分别为小时,分钟和秒。在我的应用程序中......这是完美的,但在通知中心并非如此。倒计时加载正确并且效果很好,持续约20秒。之后,它跳过一秒钟并冻结,然后在大约4秒后重新开始,然后重置整个小部件(一切消失),然后大约2秒钟后整个小部件重置。这是记忆警告还是什么?定时器在今天扩展冻结扩建
视图控制器: mainTextLabel.text = 436496400
NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.nicmac.nextgame"];
[sharedDefaults setObject:mainTextLabel.text forKey:@"MyNumberKey"];
[sharedDefaults synchronize];
今天 - 视图 - 控制器
- (id)initWithCoder:(NSCoder *)aDecoder {
if (self = [super initWithCoder:aDecoder]) {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(userDefaultsDidChange:)
name:NSUserDefaultsDidChangeNotification
object:nil];
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.preferredContentSize = CGSizeMake(320, 300);
[self performSelector:@selector(updateNumberLabelText) withObject:nil afterDelay:1.0];
}
- (void)userDefaultsDidChange:(NSNotification *)notification {
[self performSelector:@selector(updateNumberLabelText) withObject:nil afterDelay:1.0];
}
- (void)updateNumberLabelText {
NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.nicmac.nextgame"];
NSString *date = [defaults stringForKey:@"MyNumberKey"];
self.numberLabel.text = [NSString stringWithFormat:@"%@", date];
NSString *doubleString = self.numberLabel.text;
double value = [doubleString doubleValue];
destinationDate = [NSDate dateWithTimeIntervalSince1970:value];
timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateNumberLabelText) userInfo:nil repeats:YES];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
int units = NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
NSDateComponents *components = [calendar components:units fromDate:[NSDate date] toDate:destinationDate options:0];
[hour setText:[NSString stringWithFormat:@"%ld", (long)[components day] * 24 + (long)[components hour]]];
[minute setText:[NSString stringWithFormat:@"%ld", (long)[components minute]]];
[second setText:[NSString stringWithFormat:@"%ld", (long)[components second]]];
}
谢谢!