2011-12-25 2 views
0

Как я понимаю, перед классом NSES необходимо загрузить представление класса NSViewController, прежде чем что-либо можно будет изменить в представлении через сеттеры и геттеры. Проблема в том, что представление в контроллере должно отображать обратный отсчет, поэтому класс контроллера представления имеет NSTimer, который будет менять stringValue каждую секунду. Но из того, что я вижу, я должен использовать что-то наподобие:Какао: загрузка представления из класса NSViewController

[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] в нескольких местах в коде выше, но ни один из них не имеет значения.

Надеюсь, я ясно понял, что я ищу на этот раз, любая помощь будет оценена по достоинству.

ответ

0

Как вы инициализируете контроллер вида? Является ли он архивированным в банке, или вы делаете это в коде? Я думаю, что вы на самом деле не говорите, с чем связан.

Если это часть наконечника, вам нужно установить правильное поле имени ниба в инспекторе атрибутов.

Если вы создаете экземпляр кода в коде, вам нужно явно указать ему, что это за имя.

Самый простой способ, чтобы переопределить init так:

- (id)init { 
    self = [super initWithNibName:@"MyViewController" bundle:nil]; 
    if (self) { 
     // Initialization code here. 
    } 
    return self; 
} 
+0

Ничего не случилось, я использовал - (ID) initWithNibName: (NSString *) nibNameOrNil расслоение: (NSBundle *) nibBundleOrNil {само = [ super initWithNibName: nibNameOrNil bundle: nibBundleOrNil]; if (self) {} return self;} Который, я думаю, не так уж и отличается. – Elbimio

+0

Создаете ли вы контроллер вида в коде? Или у вас есть где-нибудь в кепке? Если у вас есть, если в наконечнике вам нужно назначить ему имя. –

+0

Я просто добавил классы NSViewController, ничего не найдено в nib. – Elbimio

Смежные вопросы