0

I tried to save what user choose color from Plain Segmented Control in objective-c with this code but it doesn't working

for saving

   UIColor *saveColor = changeColor.backgroundColor;
   NSUserDefaults *Color = [NSUserDefaults standardUserDefaults];
   [Color setObject:saveColor forKey:@"saveColor"];
   [Color synchronize];

for loading

   NSUserDefaults *color = [NSUserDefaults standardUserDefaults];
   UIColor *loadColor = [color objectForKey:@"saveColor"];
   [changeColor setBackgroundColor:loadColor];
Faisal
  • 17
  • 6
  • possible duplicate of [Saving UIColor to and loading from NSUserDefaults](http://stackoverflow.com/questions/1275662/saving-uicolor-to-and-loading-from-nsuserdefaults) –  Jun 28 '15 at 02:28
  • I don't think you can save `UIColor` directly to `NSUserDefaults`. You need to archive it first or wrap it in some kind of object type, such as `NSString`, using [saveColor stringFromColor], then save that to `NSUserDefaults`. – JaredH Jun 28 '15 at 04:18

2 Answers2

1

You cannot just save UIColor directly to NSUserDfaults. They must be instance of NSData, NSString, NSNumber, NSDate, NSArray or NSDictionary, For other and custom objects you can put into nsdata by archiving.

//For Encoding

UIColor *bgColor =[UIColor whiteColor];
NSData *encodedData =[NSKeyedArchiver archivedDataWithRootObject: bgColor];
[[NSUserDefaults standardUserDefaults] setObject:encodedData forKey:@"bgColorKey"];

//For decoding

NSData *decodedData = [[NSUserDefaults standardUserDefaults] objectForKey:@"bgColorKey"];
UIColor *bgcolor = [NSKeyedUnarchiver unarchiveObjectWithData:decodedData];
self.yourView.backgroundColor = bgcolor;
Bishow Gurung
  • 1,962
  • 12
  • 15
0

thanks its work i use this to save

    UIColor *color = self.view.backgroundColor ;
    const CGFloat *components = CGColorGetComponents(color.CGColor);
    NSString *colorAsString = [NSString stringWithFormat:@"%f,%f,%f,%f", components[0], components[1], components[2], components[3]];
    NSUserDefaults *userDefaults =[NSUserDefaults standardUserDefaults];
    [userDefaults setObject:colorAsString forKey:@"color"];

and this to load

       NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
{
    NSString *colorAsString = [userDefaults objectForKey:@"color"];
    NSArray *components = [colorAsString componentsSeparatedByString:@","];
    CGFloat r = [[components objectAtIndex:0] floatValue];
    CGFloat g = [[components objectAtIndex:1] floatValue];
    CGFloat b = [[components objectAtIndex:2] floatValue];
    CGFloat a = [[components objectAtIndex:3] floatValue];
    self.view.backgroundColor = [UIColor colorWithRed:r green:g blue:b alpha:a];
}
Faisal
  • 17
  • 6