我正在教自己可可,并且大部分时间都在享受这种体验。我一整天都在努力解决谷歌让我失望的一个简单问题。我已经阅读了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更改歌曲的版本时,我想要更新它。我做了以下事情:
将NSObjectController对象拖到文档窗口和Inspector-&gt;我设置的属性中:
转到Inspector-&gt; Bindings-&gt; Controller Content
选择标签的单元格并转到Inspector
我试图将第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:
我需要将3.更改为
所有编译并且玩得很好!
答案 0 :(得分:1)
您希望按照建议将控制器的内容绑定到mySong密钥路径。您可能没有做的是将mySong作为属性或实例方法暴露在文件所有者(通常是您的应用程序委托)中。