Вход/Регистрация
iOS. Приемы программирования
вернуться

Нахавандипур Вандад

Шрифт:

@implementation ColorTransformer

+ (BOOL) allowsReverseTransformation{

return YES;

}

+ (Class) transformedValueClass{

return [NSData class];

}

— (id) transformedValue:(id)value{

/* Преобразуем цвет в данные */

UIColor *color = (UIColor *)value;

CGFloat red, green, blue, alpha;

[color getRed:&red green:&green blue:&blue alpha:&alpha];

CGFloat components[4] = {red, green, blue, alpha};

NSData *dataFromColors = [[NSData alloc] initWithBytes: components

length: sizeof(components)];

return dataFromColors;

}

— (id) reverseTransformedValue:(id)value{

/* Выполняем обратное преобразование из данных в цвет */

NSData *data = (NSData *)value;

CGFloat components[4] = {0.0f, 0.0f, 0.0f, 0.0f};

[data getBytes: components length: sizeof(components)];

UIColor *color = [UIColor colorWithRed: components[0]

green: components[1]

blue: components[2]

alpha: components[3]];

return color;

}

@end

Теперь возвращаемся к модели данных. Создадим управляемый объект Laptop и его атрибуты/свойства. Убедитесь, что атрибут color является преобразуемым. Выделив этот атрибут, нажмите на клавиатуре Alt+Command+3 и откройте Model Inspector (Инспектор модели) для этого атрибута. В поле name преобразуемого класса введите имя специального преобразователя. В данном случае это будет ColorTransformer (рис. 16.21).

Рис. 16.21. Создание модели с преобразуемым атрибутом

Теперь воспользуемся приемами, изученными в разделе 16.2, и сгенерируем файл класса для управляемого объекта Laptop. После этого перейдем к заголовочному файлу этого управляемого объекта. Как видите, атрибут color рассматриваемого класса относится к типу id:

#import <Foundation/Foundation.h>

#import <CoreData/CoreData.h>

@interface Laptop: NSManagedObject

@property (nonatomic, retain) NSString * model;

@property (nonatomic, retain) id color;

@end

Уже неплохо. Но чтобы сделать код еще лучше, в частности помочь компилятору выявлять возможные проблемы (они могут возникать, если присваивать этому свойству значения неподходящих типов), вручную изменим этот тип данных на UIColor:

#import <Foundation/Foundation.h>

#import <CoreData/CoreData.h>

/* Обязательно импортируем эту информацию в таком виде, в каком

UIColor находится в UIKit */

#import <UIKit/UIKit.h>

@interface Laptop: NSManagedObject

@property (nonatomic, retain) NSString * model;

@property (nonatomic, retain) UIColor *color;

@end

Итак, осталось объединить весь изученный материал и применить его на практике. В делегате нашего приложения создадим экземпляр Laptop и зададим для него красный цвет. Затем вставим этот объект в стек Core Data и попытаемся считать его обратно. Так мы проверим, удалось ли успешно сохранить цветовое значение и вновь достать его из базы данных:

#import «AppDelegate.h»

#import «Laptop.h»

  • Читать дальше
  • 1
  • ...
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • 293
  • 294
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: