我正在尝试创建一个基于视图的NSTableView,通过Cocoa绑定填充。
我的NSArrayController指向应用程序委托的jobs
属性的currentUser
数组属性,如下所示:
我希望该数组中的每个模型都属于HSJob
类:
但是,一旦我将我的表视图绑定到NSArrayController,它的arrangedObjects
属性由于某种原因认为它属于类HSJob
(我期待NSArray
)。
显然,这不允许我将单个单元格内容链接到Job对象属性,并且我无法在表格视图中显示任何内容:
那我在这里做错了什么?
更新
我甚至决定实施一些手动值更新通知+将所有内容移动到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
属性设置了一个新值,该数组也永远不会显示。
答案 0 :(得分:1)
你“做错了”是在MainMenu.xib以外的XIB中创建一个app委托对象,然后假设它是[NSApp委托]。你实际得到的是你的app委托类的一个完全独立的对象,它有自己的属性,只是为了那个xib。因此,附加到您的XIB的对象永远不会运行applicationDidFinish启动,因为它不是您的应用程序的委托。
我建议通过修改app委托类的init来实现解决方案: https://stackoverflow.com/a/22873562/3120884
MainMenu.xib因为具有App Delegate对象而失败,因为作为Info.plist中指定的NSMainNib,它在NSApplicationMain中得到特殊处理,它将Interface Builder对象连接到[NSApp委托]。
答案 1 :(得分:0)
我设法通过将NSArrayController
绑定到Application
而不是手动创建的AppDelegate
对象来解决此问题。因此,Model Key Path现在是:
self.delegate.currentUser.jobs
显然,这并没有被Xcode自动完成,它仍然抱怨无法解决路径,但无论如何都可行。
我在Xib中的AppDelegate
对象不起作用的原因仍然是个谜,但它可能与所讨论的Xib不是默认的MainMenu.xib这一事实有关,但是自定义NSPanel连接到控制器。