Как связать текстовые поля с атрибутами одного основного объекта данных, содержащего одну строку? - PullRequest
2 голосов
/ 06 сентября 2011

У меня есть представление, которое хочет показать сводные данные об использовании моего приложения. Достаточно удобно, что у меня есть объект данных ядра какао со всеми данными об использовании, предварительно агрегированными (таким образом, он имеет только одну строку) Я хотел бы связать каждый отдельный атрибут в сущности с различными NSTextFields (например, не в NSTableView).

Это, похоже, не тот шаблон использования, который хорошо обрабатывает ядро ​​данных + конструктор интерфейса. Пока что я делаю, дублируя мои агрегированные атрибуты в NSUserDefaults и привязывая мои текстовые поля к значениям по умолчанию. Я хотел бы лучший, элегантный способ сделать это.

Есть идеи получше? Нужно ли мне бить по голове большой жирной подсказкой?

Спасибо, как всегда, за чтение ...

Ответы [ 2 ]

1 голос
/ 07 сентября 2011

Хорошо, я просто ударил себя по голове своей большой жирной подсказкой.Решением было использовать NSObjectController.

  1. Добавить экземпляр NSObjectController в реализацию NSWindowController в качестве IBOutlet.
  2. Добавить NSObjectController в xib для диалогового окна и привязать к нему поля.
  3. Свяжите NSObjectController в вашем контроллере вида / окна (Владелец файла) с NSObjectController в xib.
  4. Реализуйте контроллер окна windowDidLoad.

В моем случае этов заголовке выглядит так:

NSObjectController *dataCtrl;
...
@property (nonatomic, retain) IBOutlet NSObjectController *dataCtrl;

И так в реализации

    @synthesize dataCtrl;
    ...
    - (void)windowDidLoad
    {
        NSManagedObject *totals = [StatsSupport getTotalRecord];
        [[self dataCtrl] setContent:totals];   // where the rubber meets the road
        [super windowDidLoad];
    }

И, конечно, + [StatsSupport getTotalRecord] - это ваш базовый код типа выборки основных данных, который, если выпрочитайте это далеко, вы знаете, как это выглядит.(и он, вероятно, уже будет существовать, так как вам нужен этот код или что-то подобное для обычного чтения / обновления данных)

Наконец, немного потанцевать, потому что вы заставили какао сделать некоторую работу для вас.

0 голосов
/ 06 сентября 2011
-(void)updateFields {
  // fetch the row from the persistent store into your custom object
  // then get a reference to the data in your object, e.g.
  MyDataObject *data = [resultsArray objectAtIndex:0];

  myTextField1.text = [NSString stringWithFormat:@"%d", [data.anIntegerValue intValue]];
  myTextField2.text = data.aTextValue; 
  // etc...
}
...