繁体   English   中英

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

[英]NSObjectController confusion binding to a class property. Help!

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

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

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中,每当我使用KVC更改歌曲的版本时,我都会有一个标签(NSTextField)。 我做以下事情:

  1. 将NSObjectController对象拖到doc窗口和我设置的Inspector-> Attributes中:

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

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

    • 绑定到:对象控制器
    • 控制器键:mySong
    • 型号关键路径:版本

我试图将第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-> Bindings-> Controller Content
    • 绑定到:App Controller
    • 模型关键路径:mySong

我需要改变3.到

  1. 选择标签的单元格并转到Inspector
    • 绑定到:对象控制器
    • 控制器键:选择
    • 型号关键路径:版本

所有编译并且玩得很好!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM