Где хранить информацию о шрифте метки - в модели или представлении? - PullRequest
2 голосов
/ 27 октября 2010

Каков наилучший способ хранения информации о шрифтах надписей в Cocoa-Touch в соответствии с парадигмой MVC?

В моей модели данных я хотел бы сохранить информацию, отображаемую в пользовательском представлении, как UILabel s. Очевидно, что текст метки принадлежит модели данных. Но где я должен хранить информацию о соответствующем шрифте (и в моем случае также цвет)? Они "принадлежат" к модели данных или скорее к представлению?

Причина, по которой я спрашиваю, заключается в следующем: если я просто добавлю свойство класса UIFont в свою модель данных, у меня возникнут проблемы при сериализации и копировании моих данных (поскольку UIFont не реализует NSCoding и NSCopying протоколы), тогда как другие классы, которые я обычно использую для своих моделей данных, делают. (Эта проблема не существует для UIColor, поскольку у него уже есть NSCoding, и он может легко добавить NSCopying, хотя все равно можно было бы спросить, должен ли цвет принадлежать "модели данных.)

В общем, я хотел бы иметь возможность сериализовать все свойства моих моделей данных, и это, кажется, очень распространенный и общий шаблон в MVC. Конечно, я мог бы также написать абстракцию информации о шрифте вместо непосредственного использования UIFont в качестве свойства в моей модели данных. Но мне интересно, как лучше использовать MVC на iOS в таком случае.


Обновление: Спасибо за ответы. Я решил использовать реализацию «модели стиля» в тех случаях, когда считаю, что имеет смысл хранить информацию о шрифтах в моделях. Чтобы преодолеть трудности, упомянутые выше, я просто написал категории для двух классов, см. эту ссылку .

Ответы [ 2 ]

2 голосов
/ 27 октября 2010

Если пользователь (или внешний вход) может выбрать шрифт, он является частью модели.
Вы можете хранить имя шрифта

1 голос
/ 27 октября 2010

Я предпочитаю не хранить информацию, связанную с просмотром, такую ​​как шрифт, цвет и т. Д. В модели данных.Вместо этого я буду использовать отдельный класс для хранения всей информации о стилях (этот класс может считываться из файла plist).В целом, цвет и другие стилистические свойства всех ярлыков, кнопок и т. Д. В приложении будут одинаковыми.Поэтому я хочу изменить эту информацию в одном месте и распространить ее на каждом лейбле.Эта информация о стиле не имеет ничего общего с данными, которые отображаются на этикетках.

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

...