Я учу себя какао и большую часть времени наслаждаюсь этим.Я целый день боролся с простой проблемой, от которой меня подвел Google.Я прочитал Темы программы «Привязки какао» и думаю, что справляюсь, но все еще не могу решить свою проблему.
У меня есть очень простой класс MTSong, который имеет различные свойства.Я использовал @synthesize для создания методов получения и установки и могу использовать 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
В Интерфейсном Разработчике у меня есть метка (NSTextField), которую я хочу обновлять всякий раз, когда использую KVC для изменения версии песни.Я делаю следующее:
Перетаскиваем объект NSObjectController в окно документа и в устанавливаемые мной атрибуты Инспектора->:
- Режим: Класс
- Имя класса: MTSong
- Добавить ключ с именем version и другое имя с именем
Перейти к Inspector-> Bindings-> Controller Content
- Привязать к: Владелец файла (не уверен, что это правильно ...)
- Путь к ключу модели: версия
Выберите ячейкуметку и перейдите к Инспектору
- Привязать к: Контроллер объектов
- Ключ контроллера: 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
Я подозреваю, что владелец файла был неправ, так как я не использую приложение на основе документов, и мне нужно привязаться к AppController, поэтому шаг 2 теперь:
Перейдите в Инспектор-> Привязки-> Контент контроллера
- Привязать к: Контроллер приложения
- Путь к ключу модели: mySong
Мне нужно было изменить 3. на
Выберите ячейку метки и перейдите к Инспектору
- Привязать к: Контроллер объектов
- Ключ контроллера: выбор
- Путь к модели: версия
Все компилируется и играет красиво!