Насколько я понимаю, представление класса NSViewController должно быть загружено до того, как что-либо может быть изменено в представлении через сеттеры и геттеры. Проблема в том, что представление в контроллере должно отображать обратный отсчет, поэтому класс контроллера представления имеет NSTimer, который будет изменять stringValue каждую секунду. Но из того, что я вижу, я должен использовать что-то вроде:
[instanceOfViewControllerClass view]
в другом классе, чтобы представление загружалось, а затем setStringValue
работало бы.
Я задавал подобный вопрос раньше, но ответ был таким, как я сказал выше, в то время, когда я не знал, что мне придется постоянно менять представление.
В основном то, что я ищу, это то, что работает так:
//ViewControllerClass.m
-(void)startCountdown{
//here I make "invocation" using NSInvocation
[invocation setTarget:self];
[invocation setSelector:@selector(updateCountdown)];
timerLabelUpdater = [NSTimer timerWithTimeInterval:1 invocation:invocation repeats:YES];
}
-(void)updateCountdown {
//x would be calculated here by deducting 1 from an original amount of time
[timeLeftLabel setStringValue:@"x"];
}
Все работает нормально, если я помещаю NSLog в updateCountdown, он отлично регистрируется, что означает, что он работает, я просто не могу заставить метку измениться.
Используя ответ выше, я пытался использовать [self view]
и [self loadView]
в нескольких местах кода выше, но ни одно из них не имеет значения.
Надеюсь, я уже понял, что я ищу на этот раз, любая помощь будет признательна.