1

我正在尝试创建一个基于视图的 NSTableView,通过 Cocoa 绑定填充。

我的 NSArrayController 指向应用程序委托属性的jobs数组属性,如下所示:currentUser

绑定 1

我希望该数组中的每个模型都属于类HSJob

绑定 2

但是,一旦我将我的表视图绑定到 NSArrayController,它的arrangedObjects属性出于某种原因认为它属于类HSJob(我期待一个NSArray)。

绑定 3

显然,这不允许我将单个单元格内容链接到 Job 对象属性,并且我无法在表格视图中显示任何内容:

绑定 4

那么我在这里做错了什么?

更新

我什至决定实施一些手动值更新通知 + 将所有内容移入 AppDelegate,只是为了进行实验。在这里,我只为一些 NSDictionaries 更改了自己的HSJob课程。

AppDelegate.h

@property NSArray *things;

AppDelegate.m

@synthesize things = _things;

- (NSArray *)things {
    if (!_things)
        return @[@{@"name": @"Default Thing"}];
    else
        return _things;
}

- (void)setThings:(NSArray *)things {
    [self willChangeValueForKey:@"things"];
    _things = things;
    [self didChangeValueForKey:@"things"];
}

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {

    [self setThings:@[@{@"name": @"Actual Thing"}]];

}

只会显示“默认事物”。即使我things在应用程序启动后立即为该属性设置了一个新值,该数组也永远不会显示。

4

2 回答 2

1

你“做错了”是在 MainMenu.xib 以外的 XIB 中创建一个应用程序委托对象,然后假设它是 [NSApp 委托]。你实际得到的是你的应用程序委托类的一个完全独立的对象,它有自己的属性,只是为了那个 xib。因此,附加到您的 XIB 的对象永远不会运行 applicationDidFinish 启动,因为它不是您的应用程序的委托。

我建议通过在此处修改您的应用程序委托类的 init 解决方案: https ://stackoverflow.com/a/22873562/3120884

MainMenu.xib 没有使用 App Delegate 对象,因为作为 Info.plist 中指定的 NSMainNib,它在 NSApplicationMain 中得到特殊处理,它确实将该 Interface Builder 对象连接到 [NSApp delegate]。

于 2014-04-06T00:39:40.223 回答
0

我设法通过绑定 my NSArrayControllertoApplication而不是手动创建的AppDelegate对象来解决这个问题。因此,Model Key Path 现在是:

self.delegate.currentUser.jobs

显然这不会被 Xcode 自动完成,它仍然抱怨无法解析路径,但它仍然有效。

AppDelegate在 Xib 中的对象不起作用的原因仍然是个谜,但这可能与所讨论的 Xib 不是默认 MainMenu.xib 而是附加到控制器的自定义 NSPanel 的事实有关。

于 2013-10-02T07:59:42.593 回答