Проблема привязки NSArrayController обратно к ивару - PullRequest
0 голосов
/ 22 августа 2010

У меня проблема со связанным свойством пользовательского представления.Свойство привязано к NSArrayController для объекта основных данных.

Вот проблема:

На мой взгляд, я рисую несколько прямоугольников.Позиции этих прямоугольников сохраняются в объекте в основных данных (как NSRects, обернутые NSValue).Прямоугольники можно перетаскивать, и когда я перетаскиваю прямоугольник, я хочу, чтобы сущность была обновлена ​​до новой позиции.Но я не могу выяснить, как связать arrayController обратно с представлением.

Вот как все связано:

  • У меня есть WindowController с выходами наview и arrayController.

  • arrayController привязан к managedObjectContext windowController и, следовательно, к моей модели данных ядра.(Эта привязка и привязка к сущности устанавливаются в Интерфейсном Разработчике)

  • Представление привязано к массиву ControlCler с помощью ивара «rectangleValuesArray»

Это последнее связывание устанавливается в windowController с помощью:

[connectionsView bind:@"rectangleValuesArray"
             toObject:elementsArrayController
          withKeyPath:@"arrangedObjects.rectangleValue"
              options:nil];

Это работает до сих пор.

Теперь я попытался установить связывание в другом направлении с помощью:

[elementsArrayController bind:@"arrangedObjects.rectangleValue"
                     toObject:connectionsView
                  withKeyPath:@"rectangleValuesArray"
                      options:nil];

Теперь, когда я меняю свой ivar, сущность должна быть обновлена ​​(верно?).Но это не работает - я получаю это из консоли:

Cocoa Bindings: Error setting value for bound property arrangedObjects.rectangleValue of object <NSArrayController: 0x200027100>[entity: Element, number of selected objects: 1]: [<NSArrayController 0x200027100> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key arrangedObjects.rectangleValue.

Что я здесь не так делаю?Пожалуйста, кто-нибудь поможет?

Симон

Ответы [ 2 ]

2 голосов
/ 22 августа 2010

Пара вещей.

Во-первых, исключение правильно: невозможно установить значение прямоугольника для любых объектов NSValue. Они неизменны.

Звучит так, будто вы пытаетесь поддерживать параллельные массивы, причем одним из них является массив прямоугольников. Не делай этого; Привязка задыхается от этого, и это делает поддержку AppleScript также более сложной.

Что вам нужно сделать, это реализовать объекты модели и сохранить один массив из них. Все имеющиеся у вас в настоящее время массивы, включая один из прямоугольников, должны стать свойствами объектов модели - у каждого из них есть прямоугольник, помимо прочего.

Другое дело, что вы не привязываете контроллер к представлению; Вы связываете вид с контроллером. Сделав это, все готово.

Вы можете также рассмотреть возможность установки этого в IB, а не в коде, если это возможно. Не сопротивляйтесь использованию IB; это твой друг.

0 голосов
/ 22 августа 2010

Не совсем уверен, что я слежу за тем, что вы там делаете, но рассматривали ли вы этот подход:

  • дает представление IBOutlet NSArrayController* myArrayController ivar для вашего контроллера массива (возможно, уже есть что-то подобное, Я понимаю), и установите это соединение в IB
  • , пропустите два ручных вызова привязки из оконного контроллера

Теперь, чтобы изменить содержимое контроллера массива изнутрипредставление, вы бы назвали [myArrayController mutableArrayValueForKeyPath:@"arrangedObjects.rectangleValue"], который должен дать вам прокси для этого ключевого пути, который вы можете изменить по желанию с помощью обновлений KVO.

Надеюсь, что это не совсем так.

...