【问题标题】:subclass NSWindowController Core Data子类 NSWindowController 核心数据
【发布时间】:2013-08-09 18:09:37
【问题描述】:

我有一个新手问题,我试图在网上找到答案,但没有成功。任务很简单:我想创建一个基于核心数据文档的应用程序,但要更改一些标签对象中的值。使用界面生成器,我可以构建核心数据模型并使用数组控制器、表等填充它,而无需编写任何代码。到现在为止还挺好。我的测试示例是使用具有长度和宽度属性的 Box 实体构建核心数据模型。我想要一个标签来显示该区域,即任何几何挑战的长度*宽度:)。

所以在浏览完之后,我决定我需要创建一个 NSWindowController 子类,并在选择表中的框时使用它来更新标签。曾经尝试过,但失败了。在我将标签连接到窗口控制器之前,我遇到了一个问题。在模板 cmets 之后,我将其添加到 Document.m:

- (void)makeWindowControllers
{
    NSLog(@"Adding custom Window Controller");
    MyWindowController* myWindowController = [[MyWindowController alloc] init];
    [self addWindowController:myWindowController];
}

还将这个添加到模板 MyWindowController.m:

- (id)init
{
    self = [super initWithWindowNibName:@"MyWindowController"];
    return self;
}

窗口控制器有自己的 NIB 文件,来自 Interface builder,我在其中放置了表格和标签等。文件所有者设置为 MyWindowController。可能忘记了其他事情,但这是我现在记得的。

日志消息在启动时出现,但是在窗口出现之前我得到一个异常“这个类不符合键 managedObjectContext 的键值编码”。我猜我没有正确连接到文档类的窗口控制器?我的另一个想法是数组控制器位于窗口控制器 nib 中,而不是文档 nib 中,所以它可能在错误的位置寻找 managedObjectContext?

【问题讨论】:

    标签: core-data subclass nswindowcontroller


    【解决方案1】:

    我会尝试不同的方法:将area 添加到您的Box 实体作为只读属性。使用 Xcode 自动创建一个Box 类(查看数据模型时“编辑器”菜单中的“创建 NSManagedObject 子类”菜单项),然后将其添加到 Box.h

    @property (weak, readonly) NSString * area;
    

    这个到 Box.m

    - (NSNumber *)area
    {
        return [NSNumber numberWithDouble:([[self length] doubleValue] - [[self width] doubleValue])];
    }
    
    + (NSSet *)keyPathsForValuesAffectingArea
    {
        return [NSSet setWithObjects:@"length", @"width", nil];
    }
    

    如果您这样做,您只需将area 绑定到一个标签值,就像您为其他Box 属性所做的那样。无需继承 NSWindowController 或观察变化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-15
      • 1970-01-01
      • 2012-05-09
      相关资源
      最近更新 更多