NSObjectController混淆绑定到类属性。救命!

时间:2010-02-09 22:04:25

标签: objective-c cocoa interface-builder cocoa-bindings

我正在教自己可可,并且大部分时间都在享受这种体验。我一整天都在努力解决谷歌让我失望的一个简单问题。我已经阅读了Cocoa Bindings Program Topics并认为我理解它但仍无法解决我的问题。

我有一个非常简单的名为MTSong的类,它有各种属性。我使用@synthesize来创建getter / setter,并且可以使用KVC来更改属性。即在我的应用程序控制器中,以下工作:

mySong = [[MTSong alloc]init];
[mySong setValue:@"2" forKey:@"version"];

如果我在我的班级代码MTSong.h中做了点什么,那就是:

#import <Foundation/Foundation.h>

@interface MTSong : NSObject {
    NSNumber    *version;
    NSString    *name;
}
@property(readwrite, assign) NSNumber *version;
@property(readwrite, assign) NSString *name;
@end

和MTSong.m是:

#import "MTSong.h"

@implementation MTSong

- (id)init
{
    [super init];
    return self;
}

- (void)dealloc
{
    [super dealloc];
}

@synthesize version;
@synthesize name;
@end

在Interface Builder中,我有一个标签(NSTextField),每当我使用KVC更改歌曲的版本时,我想要更新它。我做了以下事情:

  1. 将NSObjectController对象拖到文档窗口和Inspector-&gt;我设置的属性中:

    • 模式:班级
    • 班级名称:MTSong
    • 添加名为version的密钥和另一个名为
    • 的密钥
  2. 转到Inspector-&gt; Bindings-&gt; Controller Content

    • 绑定到:文件所有者(不确定这是正确的......)
    • 型号关键路径:版本
  3. 选择标签的单元格并转到Inspector

    • 绑定到:对象控制器
    • 控制器键:mySong
    • 型号关键路径:版本
  4. 我试图将第2步中的模型密钥路径更改为“mySong”,这更有意义,但编译器会抱怨。任何建议都将不胜感激。

    斯科特


    更新帖子评论

    我没有暴露mySong属性,所以将我的AppController.h更改为:

    #import <Cocoa/Cocoa.h>
    @class MTSong;
    
    @interface AppController : NSObject {
        IBOutlet NSButton *start;
        IBOutlet NSTextField *tf;
        MTSong *mySong;
    }
    -(IBAction)convertFile:(id)sender;
    @end
    

    我怀疑File的所有者是错的,因为我没有使用基于文档的应用程序,我需要绑定到AppController,所以现在步骤2:

    1. 转到Inspector-&gt; Bindings-&gt;控制器内容
      • 绑定到:App Controller
      • 模型关键路径:mySong
    2. 我需要将3.更改为

      1. 选择标签的单元格并转到Inspector
        • 绑定到:对象控制器
        • 控制器键:选择
        • 型号关键路径:版本
      2. 所有编译并且玩得很好!

1 个答案:

答案 0 :(得分:1)

您希望按照建议将控制器的内容绑定到mySong密钥路径。您可能没有做的是将mySong作为属性或实例方法暴露在文件所有者(通常是您的应用程序委托)中。

相关问题