Путаница путаницы NSObjectController со свойством класса. Помогите! - PullRequest
3 голосов
/ 10 февраля 2010

Я учу себя какао и большую часть времени наслаждаюсь этим.Я целый день боролся с простой проблемой, от которой меня подвел 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 для изменения версии песни.Я делаю следующее:

  1. Перетаскиваем объект NSObjectController в окно документа и в устанавливаемые мной атрибуты Инспектора->:

    • Режим: Класс
    • Имя класса: MTSong
    • Добавить ключ с именем version и другое имя с именем
  2. Перейти к Inspector-> Bindings-> Controller Content

    • Привязать к: Владелец файла (не уверен, что это правильно ...)
    • Путь к ключу модели: версия
  3. Выберите ячейкуметку и перейдите к Инспектору

    • Привязать к: Контроллер объектов
    • Ключ контроллера: 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. на

Выберите ячейку метки и перейдите к Инспектору
  • Привязать к: Контроллер объектов
  • Ключ контроллера: выбор
  • Путь к модели: версия

Все компилируется и играет красиво!

1 Ответ

1 голос
/ 10 февраля 2010

Вы хотите привязать содержимое контроллера к пути ключа mySong, как вы предлагали. Чего вы, вероятно, не делаете, так это выставляете mySong как свойство или метод экземпляра в Владельце файла (обычно это делегат вашего приложения).

...