0

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]])
        {

//DONE - (NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item{ if ([[tableColumn identifier] 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

NSTableColumn:

最後

NSTextField バインディングのセットアップ:

バインディングのセットアップ バインディングのセットアップ 2

望ましい結果:

ジミーヘンドリクス

私が欲しいものを得るためにバインディングをセットアップする方法は?

4

2 に答える 2

0

前に述べたように、File's Owner.info.duration は意味がありません。なぜなら、File's Owner はクラスの Outlineview から離れているからです。ディクショナリ Info は、ObjectFileTableCellView のプロパティです。

私はプログラムで NSTextfield を info.duration にバインドしましたが、うまくいきました!

于 2013-08-26T21:22:56.580 に答える
0

info.duration「ファイルの所有者」が実際にあなたのObjectFileTableCellView.

labelStartTimeバインディングを構成するときにコントローラー キーとして使用します。

スライダーのバインディング構成も再確認してください。あなたも同じような間違いをしたかもしれません。

于 2013-08-23T14:07:07.513 に答える