2013-08-09 2 views
1

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

Пример:

@implementation myNSManagedObjectSubclass 
@dynamic one; // edited by user in form 
@dynamic two; // edited by user in form 
@dynamic three; // edited by user in form 
@dynamic four; // edited by user in form 
@dynamic five; // edited by user in form 
@dynamic icon; // automatically set based values of above 5 items 
@end 

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

1) Что касается построения формы в виде таблицы, которую пользователь может использовать для редактирования объектов: Кроме жесткого кодирования содержимое представления таблицы, как я могу получить представление в таблице для создания ячеек только для атрибутов, которые ему нужно показать? Моя нынешняя идея заключается в использовании this method для повторения всех свойств моего объекта и наличия двоичной «маски отображения», которую может использовать табличное представление для определения того, должна ли она отображать ячейку для определенного элемента. Есть ли способ лучше?

2) Относительно автоматической установки одного атрибута, основанного на значении других: Как? Я думаю, что KVO вступает в игру здесь (мне нужно, чтобы атрибут значка обновлялся на экране, как только один из атрибутов зависит от изменений), но я новичок в Core Data и не уверен, что я прочитал, могу ли я добавить KVO к подклассам NSManagedObject.

ответ

1

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

Ad one - итерация с помощью таких атрибутов, как красивая абстракция, но я сомневаюсь, что это сэкономит вам любую работу. Как вы заметили, вам все равно нужно создать «бинарную маску дисплея», чтобы определить, какой атрибут нужно редактировать. Кажется довольно грязным, как только атрибут добавляется где-то ...

У меня был хороший опыт в подобной ситуации (40 объектов, 100 единиц атрибутов) с помощью простого «картографического» слоя, который можно использовать для этой цели. Ввод атрибутов в plist (в желаемом порядке) и добавление других свойств действительно очень быстро и просто - и гибкое решение должно что-то изменить.

Вы все еще можете перебирать атрибуты через NSEntityDescription, чтобы создать свой начальный plist.

+0

О, человек ... Как я мог не думать о переопределяющих сеттерах? Это так просто. Спасибо. Не могли бы вы рассказать о решении plist? – Shinigami

+0

Plist: словарь имен сущностей, массивы атрибутов с одной или несколькими дополнительными фрагментами информации. Мы использовали это для перевода, например. Объекты JSON в существующие структуры данных. Таким образом вы можете легко и просто настроить порядок и «редактируемый» атрибут. – Mundi

1

Для 2, да, KVO может помочь вам в этом. Атрибут обычно также будет временным и обновляться, когда объект пробуждается от извлечения, а также при изменении наблюдаемых свойств.

Для 1 рассмотрите использование NSEntityDescription, в частности attributesByName, чтобы вы могли автоматически получать содержимое таблицы (если вы хотите отобразить внутреннее имя) и информацию об атрибутах (чтобы вы не отображали переходные (производные) атрибуты).

Смежные вопросы