Я пытаюсь наблюдать свойство int (totalSeconds) в классе (StopWatch), где общее количество секунд увеличивается на единицу каждый раз, когда запускается время (интервалы в одну секунду), мой пользовательский класс (DynamicLabel) должен получить подкласс UILabelсообщение Наблюдать за сообщением каждый раз, когда изменяется значение totalSeconds, но оно никогда не вызывается.Вот соответствующий код:
#import "StopWatch.h"
@interface StopWatch ()
@property (nonatomic, strong) NSTimer *timer;
@end
@implementation StopWatch
@synthesize timer;
@synthesize totalSeconds;
- (id)init
{
self = [super init];
if (self) {
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(fireAction:) userInfo:nil repeats:YES];
[runLoop addTimer:timer forMode:NSRunLoopCommonModes];
[runLoop addTimer:timer forMode:UITrackingRunLoopMode];
}
return self;
}
- (void)fireAction:(NSTimer *)aTimer
{
totalSeconds++;
}
@end
#import "DynamicLabel.h"
@implementation DynamicLabel
@synthesize seconds;
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
seconds ++;
[self setText:[NSString stringWithFormat:@"%i",seconds]];
}
@end
и в контроллере представления:
- (void)viewDidLoad
{
[super viewDidLoad];
watch = [[StopWatch alloc] init];
[watch addObserver:dLabel1 forKeyPath:@"totalSeconds" options:NSKeyValueObservingOptionNew context:NULL];
}
, где dLabel - это экземпляр DynamicLabel
Кто-нибудь знает, почему это происходит??Это определенно как-то связано с NSTimer, потому что я попробовал то же самое, где я вручную изменяю значение totalSeconds, чтобы проверить, работает ли KVO, и это работает нормально.Тем не менее, когда totalSeconds увеличивается в методе запуска таймера, метод НаблюдатьВыбуждающий_Клиент никогда не вызывается.Кроме того, для тех, кто интересуется, почему я использую KVO для этого, это потому, что в реальном приложении (это просто тестовое приложение) мне нужно отображать несколько запущенных секундомеров (в разное время) на экране и записывать прошедшеераз.Я хотел бы сделать это, используя одни часы.Я бы очень признателен за любую помощь, которую я могу получить.
Спасибо,