【问题标题】:save backgroundColor with NSUserDefaults使用 NSUserDefaults 保存背景颜色
【发布时间】:2015-06-29 20:18:26
【问题描述】:

我尝试使用此代码保存用户从 Objective-c 中的普通分段控件中选择的颜色,但它不起作用

保存

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

用于加载

   NSUserDefaults *color = [NSUserDefaults standardUserDefaults];
   UIColor *loadColor = [color objectForKey:@"saveColor"];
   [changeColor setBackgroundColor:loadColor];

【问题讨论】:

  • 我认为您不能将UIColor 直接保存到NSUserDefaults。您需要先将其存档或将其包装为某种对象类型,例如NSString,使用[saveColor stringFromColor],然后将其保存到NSUserDefaults。

标签: objective-c xcode nsuserdefaults uisegmentedcontrol uicolor


【解决方案1】:

您不能只将 UIColor 直接保存到 NSUserDfaults。它们必须是 NSData、NSString、NSNumber、NSDate、NSArray 或 NSDictionary 的实例,对于其他和自定义对象,您可以通过归档将其放入 nsdata。

//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;

【讨论】:

    【解决方案2】:

    感谢它的工作,我用它来保存

        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"];
    

    这个要加载

           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];
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 1970-01-01
      • 2016-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-20
      相关资源
      最近更新 更多