0

据我了解,必须先加载 NSViewController 类的视图,然后才能通过 setter 和 getter 在视图中更改任何内容。问题是,控制器中的视图应该显示倒计时,所以视图控制器类有一个 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"];
}

一切正常,如果我在 updateCountdown 中放置一个 NSLog,它会完美记录,这意味着它正在运行,我只是无法更改标签。

使用上面的答案,我尝试在上面的代码中的几个地方使用[self view]and [self loadView],但它们都没有任何区别。

我希望我已经清楚我这次要寻找什么,任何帮助将不胜感激。

4

1 回答 1

0

你是如何初始化视图控制器的?它是存档在笔尖中,还是您在代码中执行?我在想你实际上并没有告诉它它与哪个笔尖相关联。

如果它是笔尖的一部分,您需要在属性检查器中设置正确的笔尖名称字段。

如果你在代码中实例化它,你需要明确地告诉它它的 nib 的名称是什么。

最简单的方法是像这样覆盖init

- (id)init {
    self = [super initWithNibName:@"MyViewController" bundle:nil];
    if (self) {
        // Initialization code here.
    }
    return self;
}
于 2011-12-25T11:27:14.710 回答