Привязка с выбором NSArrayController в другой кончик

У меня есть два перья:

  1. Store.nib
  2. Product.nib

Владелец файла Product.nib является подклассом NSViewController который имеет свойство product с которыми связаны различные элементы управления:

@property(nonatomic, retain) SRProduct *product;


Store.nib имеет NSArrayController объект, который был привязан к свойству SRApplicationController, который является этим свойством:

@property(nonatomic, retain) NSArray *products;

SRApplicationController имеет выход к этому NSArrayController объект.


в -[SRApplicationController init] метод я инициирую SRProductController объект с пером Product.nib. В -[SRApplicationController awakeFromNib] Я добавляю представление контроллера продукта к представлению в Store.nib и связываю productsArrayController свойство (выход) SRApplicationController возражать против product контроллера продукта:

- (id)init {
  if (self = [super init]) {
    self.productController = [[SRProductController alloc] initWithNibName:@"Product" bundle:nil];
  }

  return self;
}

- (void)awakeFromNib {
  [self.productView removeAllSubviews]; // this method is from a category
  [self.productView addSubview:self.productController.view];
  [self.productController.view setFrame:self.productView.bounds];

  [self.productsArrayController bind:@"selectedObjects" toObject:self.productController withKeyPath:@"product" options:nil];
}

Когда я запускаю приложение, я не получаю ни ошибок, ни предупреждений, консоль остается пустой, в табличном представлении со всеми продуктами в Store.nib показаны все продукты, и я могу выбрать их. Проблема в том, что все поля в Product.nib пусты, но они связаны с product свойство владельца файла. Кто-нибудь может мне помочь с этой проблемой? Заранее спасибо.:)

2 ответа

Решение

Где-то есть пример кода, который показывает, как это сделать, я не могу вспомнить, если это код Apple или откуда-то еще. По сути, вам нужно иметь контроллер массива в каждом файле пера. Контроллер массива в кончике стиля списка должен быть связан нормально, а его контроллер массива должен быть доступным свойством. Во втором nib-файле вам нужно связать содержимое контроллера массива как обычно. Также необходимо убедиться, что владелец файла этого пера детали имеет связь с владельцем файла пера списка. Затем вы привязываете дескриптор сортировки для контроллера массива деталей к listController.arrayController.sortDescriptors (это может быть на самом деле sortDescriptor не могу вспомнить с макушки головы). Вы также привязываете индекс выбора таким же образом. Это позволит контроллеру массива в наконечнике детали следить за тем, что происходит в наконечнике списка, после чего вы просто привязываете каждый элемент детали как обычно (то есть текстовое поле имени продукта будет иметь привязанное значение arrayController.selection.productName, Если вы забудете привязать дескриптор сортировки контроллера массива пера детали к его аналогу в списке пера, перо детали будет обновляться каждый раз, когда выбор изменяется в списке, но он может не измениться на нужный продукт (привязка просто пропускает selectionIndex не какой объект выделен).

При выделении контроллера представления для Product.nib вы должны привязать его свойство "product" к выбору вашего контроллера массива, это можно сделать только в коде, но это избавит от необходимости использовать несколько экземпляров контроллера массива и избавит от необходимости связать их вместе, чтобы они выглядели одинаково.

Кроме того, я предлагаю не связывать содержимое контроллера массива с вашим собственным NSArray, если вы не связываете это свойство, которое контроллер массива будет выделять и управлять своим собственным массивом. Вы сможете добавлять / удалять объекты напрямую, вместо того, чтобы полагаться на собственное свойство, чтобы тщательно уведомить NSArrayController о том, что произошло изменение.

Привязка "содержимого" предназначена для того, чтобы позволить привязать объекты Oreject объекта контроллера массива к содержимому другого контроллера, чтобы иметь возможность фильтровать и сортировать содержимое по-разному.

Другие вопросы по тегам