Сохранение UIColor к и загрузка из NSUserDefaults

Это зависит от того, что все Вы хотите настроить, потому что существуют некоторые опции, которые не могут быть настроены с аннотациями. Если мы видим его со стороны аннотаций:

  • плюс: аннотации менее болтливы
  • минус: аннотации менее видимы

Вам решать, что более важно...

В целом я рекомендовал бы выбрать один путь и использовать все это по некоторой закрытой части продукта...

(за некоторыми исключениями: например, если Вы выбираете основанные на XML конфигурации, нормально использовать @Autowire аннотацию. Это смешивается, но этот помогает и удобочитаемости и пригодности для обслуживания)

52
задан Josh Caswell 5 January 2013 в 09:31
поделиться

4 ответа

Один из способов сделать это - заархивировать (как с NSColor, хотя я не тестировал это):

NSData *colorData = [NSKeyedArchiver archivedDataWithRootObject:color];
[[NSUserDefaults standardUserDefaults] setObject:colorData forKey:@"myColor"];

И вернуть:

NSData *colorData = [[NSUserDefaults standardUserDefaults] objectForKey:@"myColor"];
UIColor *color = [NSKeyedUnarchiver unarchiveObjectWithData:colorData];
133
ответ дан 7 November 2019 в 08:58
поделиться

Я сам получил ответ

Сохранить

const CGFloat  *components = CGColorGetComponents(pColor.CGColor);
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setFloat:components[0]  forKey:@"cr"];
[prefs setFloat:components[1]  forKey:@"cg"];
[prefs setFloat:components[2]  forKey:@"cb"];
[prefs setFloat:components[3]  forKey:@"ca"];

Загрузить

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
UIColor* tColor = [UIColor colorWithRed:[prefs floatForKey:@"cr"] green:[prefs floatForKey:@"cg"] blue:[prefs floatForKey:@"cb"] alpha:[prefs floatForKey:@"ca"]];
7
ответ дан 7 November 2019 в 08:58
поделиться

Редактировать 2: Кажется, я нашел ответ . Ознакомьтесь со статьей Эрики Садун о расширении UIColor.

Изменить: Этот код, похоже, не работает для объекта UIColor. Не уверен, почему ...

Вот код, на который стоит взглянуть:

Сохранение объекта в NSUserDefaults:

 NSUserDefaults *userDefaults =[NSUserDefaults standardUserDefaults];
[userDefaults setObject:someColorObject forKey:@"myColor"];

Чтение объекта из NSUserDefaults:

NSUserDefaults *userDefaults =[NSUserDefaults standardUserDefaults];
UIColor *someColor = (UIColor *)[userDefaults objectForKey:@"myColor"];
-4
ответ дан 7 November 2019 в 08:58
поделиться

Спасибо за категорию UIColor Эрики . Мне не очень нравилось сохранять 4 числа с плавающей запятой в настройках, я просто хотел одну запись.

Поэтому, используя категорию Эрики UIColor , я смог преобразовать цвет RGB в / из NSString , который можно сохранить в настройках.

// Save a color
NSString *theColorStr = [self.artistColor stringFromColor];
[[NSUserDefaults standardUserDefaults] setObject:theColorStr forKey:@"myColor"];

// Read a color
NSString *theColorStr = [[NSUserDefaults standardUserDefaults] objectForKey:@"myColor"];
if ([theColorStr length] > 0) {
    self.myColor = [UIColor colorWithString:theColorStr];
} else {
    self.myColor = [UIColor colorWithRed:88.0/255.0 green:151.0/255.0 blue:237.0/255.0 alpha:1.0];
}
5
ответ дан 7 November 2019 в 08:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: