【问题标题】:Binding inside a NSTableCellView在 NSTableCellView 内绑定
【发布时间】:2013-08-23 12:47:18
【问题描述】:

我正在使用基于 NSOutlineView 的视图,我想将 NSSlider 和 NSTextfield 绑定到 NSDictionary 键(@""duration")。字典是我的 NSTableCellView 子类的属性。当我遇到错误时尝试设置绑定:

错误:

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<NSApplication 0x100506400> addObserver:<NSTextValueBinder 0x102609a90> forKeyPath:@"info.duration" options:0 context:0x10260c820] was sent to an object that is not KVC-compliant for the "info" property.'

.h:

#import <Cocoa/Cocoa.h>

@interface ObjectFileTableCellView : NSTableCellView {
    NSTextField *_textFieldFilePath;
    NSTextField *_textFieldDesription;
    NSButton *_checkBox;
    NSDictionary* _info;

    NSSlider*  _slider;
    NSTextField* _labelStartTime;
}


@property(retain) IBOutlet NSTextField *textFieldFilePath;
@property(retain) IBOutlet NSTextField *textFieldDescription;
@property(retain) IBOutlet NSTextField *labelStartTime;
@property(retain) IBOutlet NSSlider *slider;
@property(retain) IBOutlet NSButton *checkBox;

@property(retain) NSDictionary* info;

@end

.m :

- (NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item{
    if ([[tableColumn identifier] isEqualToString:@"Files"]) {

        if ([item isKindOfClass:[OMN_Object class]])
        {

//完成 - (NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item{ if ([[tableColumn 标识符] isEqualToString:@"Files"]) {

    if ([item isKindOfClass:[OMN_Object class]])
    {
        OMN_Object *o = item;

        ObjectFileTableCellView *v = [outlineView makeViewWithIdentifier:@"FileCell" owner:self]; // File'S owner


                hide = NO;
                NSString* d = [o.fileInfoDetails valueForKey:@"duration"];
                [v.slider setMinValue:0];
                [v.slider setMaxValue:[d doubleValue]];

                NSString *val = [NSString stringWithFormat:@"%f", v.slider.doubleValue];
                [v.labelStartTime setStringValue:val];
                [o.fileInfoDetails setValue:val forKey:@"startTime"];
                v.info = o.fileInfoDetails;

    ...

我的 NSOutlineView 视图:

NSTableColumn:

NSTextField 绑定设置:

想要的结果:

如何设置绑定以获得我想要的?

【问题讨论】:

    标签: objective-c cocoa cocoa-bindings nstablecellview


    【解决方案1】:

    您正在尝试将info.duration 绑定到单元格本身,而不是文本字段,假设“文件所有者”确实是您的ObjectFileTableCellView

    在配置绑定时使用labelStartTime 作为控制器键。

    还要仔细检查滑块的绑定配置;你可能犯了类似的错误。

    【讨论】:

    • 查看我的编辑:ObjectFileTableCellView *v = [outlineView makeViewWithIdentifier:@"FileCell" owner:self]; // 文件的所有者
    • 在您的声明中,表格视图拥有单元格视图。这与单元格视图之间的关系以及它的信息字典和它在 Interface Builder 中的文本字段之间的绑定无关。
    • 您是否尝试按照我在回答中告诉您的操作?
    • 是的,我试过了,但我无法修改外业控制器键。您如何看待以编程方式将文本字段绑定到 FileCell.info.duration 而不是使用 IB 的 File's Owner.info.duration?
    • 值得一试。但请始终记住您最初的错误消息:您正在尝试绑定到您的密钥路径不符合 KVC 的内容。
    【解决方案2】:

    如前所述,File's Owner.info.duration 没有意义,因为 File's Owner 有点偏离类大纲视图。字典信息是 ObjectFileTableCellView 的一个属性。

    我以编程方式将 NSTextfield 绑定到 info.duration 并且效果很好!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多