为什么[[NSScrollView documentView] scrollPoint:]无法在loadView方法中工作?

时间:2012-11-10 22:20:31

标签: objective-c macos cocoa

我试图在包含浏览器的视图控制器的loadView方法中自动滚动到水平图像浏览器的最右侧。当我尝试这样做时它不起作用(只是滚动到x = 1000作为测试):

- (void)loadView {
    [super loadView];
    // Set initial position
    [[[self scrollView] documentView] scrollPoint:NSMakePoint(1000.0, 0.0)];
}

但在调试过程中的某些时候,我发现这有效:

- (void)loadView {
    [super loadView];
    // Set initial position
    [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(scrollToRight) userInfo:nil repeats:NO];
}

其中scrollToRight只是一个与上面相同的实例方法。

有人知道为什么会这样吗?是因为我在loadView方法中这样做了吗?可以scrollPoint:不能从主线程调用吗?

更新:我做了一些额外的试验,比如订阅NSViewFrameDidChangeNotificaiton并根据它进行滚动,但这也不起作用。到目前为止,我能够让滚动发生的唯一方法是使用NSTimer,或者从父窗口控制器调用视图控制器scrollToRight方法。

1 个答案:

答案 0 :(得分:0)

确保[ [ self scrollView ] documentView ]nil - 它可能仍为零。此外,您必须从主线程调用-scrollPoint - 所有AppKit调用必须从主线程进行。