Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UILabel背景色默认值_Ios_Uilabel_Nsuserdefaults_Uicolor - Fatal编程技术网

Ios UILabel背景色默认值

Ios UILabel背景色默认值,ios,uilabel,nsuserdefaults,uicolor,Ios,Uilabel,Nsuserdefaults,Uicolor,我制作了一个RGB滑块,我想将两个标签的滑块值和背景色保存为NSUserDefault。保存sliderValue很好,但是对于标签背景色,我的代码不起作用。我的代码写对了吗 信息:label1的背景色应保存在NSUserDefaults中 这条线 NSString* label1 = self.label1.backgroundColor; 正在产生此错误 使用UIColor类型的表达式初始化NSString的指针类型不兼容 这条线呢 [defaults setObject:label1 f

我制作了一个RGB滑块,我想将两个标签的滑块值和背景色保存为NSUserDefault。保存sliderValue很好,但是对于标签背景色,我的代码不起作用。我的代码写对了吗

信息:label1的背景色应保存在NSUserDefaults中

这条线

NSString* label1 = self.label1.backgroundColor;
正在产生此错误

使用UIColor类型的表达式初始化NSString的指针类型不兼容

这条线呢

[defaults setObject:label1 forKey:@"label1"];
正在产生此错误

'label1'的局部声明隐藏实例变量

这是我的.m文件:

NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];

self.label1.backgroundColor =[defaults objectForKey:@"label1"];
self.labelRot.text = [defaults objectForKey:@"labelRot"];
self.labelBlau.text = [defaults objectForKey:@"labelBlau"];
self.labelGruen.text = [defaults objectForKey:@"labelGruen"];

self.sliderRot.value = [defaults floatForKey:@"sliderRot"];
self.sliderBlau.value = [defaults floatForKey:@"sliderBlau"];
self.sliderGruenn.value = [defaults floatForKey:@"sliderGruenn"];


//labelRot.text = [NSString stringWithFormat:@"%0.0f", _sliderRot.value];
//labelGruen.text = [NSString stringWithFormat:@"%0.0f", _sliderGruenn.value];
//labelBlau.text = [NSString stringWithFormat:@"%0.0f", _sliderBlau.value];

// Do any additional setup after loading the view, typically from a nib.
- (IBAction)red:(id)sender {

if (sender == _sliderRot) {
    _labelRot.text = [NSString stringWithFormat:@"%0.0f", _sliderRot.value];
    [self farbeWechseln];
}

}- (IBAction)green:(id)sender {

if (sender == _sliderGruenn) {
    _labelGruen.text = [NSString stringWithFormat:@"%0.0f", _sliderGruenn.value];
    [self farbeWechseln];
}

- (IBAction)blue:(id)sender {

if (sender == _sliderBlau) {
    _labelBlau.text = [NSString stringWithFormat:@"%0.0f", _sliderBlau.value];
    [self farbeWechseln];
}


- (IBAction)farbe:(id)sender {

[self farbeWechseln];



- (void)farbeWechseln {

    [label1 setBackgroundColor:[UIColor colorWithRed:_sliderRot.value/255 green:_sliderGruenn.value/255 blue:_sliderBlau.value/255 alpha:1.0]];
    [label2 setBackgroundColor:[UIColor colorWithRed:_sliderRot.value/255 green:_sliderGruenn.value/255 blue:_sliderBlau.value/255 alpha:1.0]];
}

- (void)speichernDefaults {

// hier werden die UserDefaults gespeichert

NSString* label1 = self.label1.backgroundColor; //HERE IS MY FIRST ERROR = incompatible pointer types intializing NSString with an expression of type UIColor
NSString *labelRot = self.labelRot.text;
NSString *labelBlau = self.labelBlau.text;
NSString *labelGruen = self.labelGruen.text;



float sliderRot = self.sliderRot.value;
float sliderGruenn = self.sliderGruenn.value;
float sliderBlau = self.sliderRot.value;


NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];

[defaults setObject:label1 forKey:@"label1"]; //HERE IS MY SECOND ERROR = local declaration of ´label1´hides instance variable

[defaults setObject:labelRot forKey:@"labelRot"];
[defaults setObject:labelBlau forKey:@"labelBlau"];
[defaults setObject:labelGruen forKey:@"labelGruen"];


[defaults setFloat:sliderRot forKey:@"sliderRot"];
[defaults setFloat:sliderGruenn forKey:@"sliderGruenn"];
[defaults setFloat:sliderBlau forKey:@"sliderBlau"];

// dieser Befehl ist für sofortiges Speichern der Userdefaults
    [defaults synchronize];

UIColor
不能直接保存到
NSUserDefaults
。Erica Sadun在创建
UIColor
类别以方便保存方面有着出色的著作。我建议将颜色转换为十六进制字符串以保存,并将十六进制字符串转换回颜色以应用为背景色


要解决您的第一个问题:

NSString* label1 = self.label1.backgroundColor;
您正在尝试创建NSString类型的变量,并为其分配UIColor对象。您需要确保您的变量与您试图分配给它的对象的类型相同。应该是:

UIColor *label1Color = self.label1.backgroundColor;
请注意,我不仅更改了变量的类型,还更改了它的名称。这一点很重要,有几个原因。通常,您希望以一种方式命名变量,使您在读取变量时能够清楚地存储它们,并且
label1
作为变量名听起来像标签,而不是颜色

这让我想到了你的第二个错误。这里的问题是,您为颜色变量指定了与标签相同的名称,并且由于在此范围内有两个名为
label1
的变量可见,编译器会抱怨。正如我在上面的代码中所做的那样更改变量名也可以解决这个问题,但是代码中还有一个问题

无法将UIColor对象直接保存到NSUserDefault。您需要将颜色转换为可存储在其中的一种数据类型,如NSData,其操作如下:

NSData *dataFromLabel1Color = [NSKeyedArchiver archivedDataWithRootObject:label1Color];
[defaults setObject:dataFromLabel1Color forKey:@"label1Color"];
您还必须修改从NSUserDefaults获取颜色的方式,以便将值从NSData转换回UIColor。这可以通过以下方式实现:

UIColor *label1Color = [NSKeyedUnarchiver unarchiveObjectWithData:[defaults objectForKey:@"label1Color"]];
self.label1.backgroundColor = label1Color;

特性列表文件只能存储基本数据类型,不能包含自定义对象。如果希望将对象写入plist,则需要将其转换为NSData对象。您可以使用NSKeyedArchiver实现这一点,它将符合NSCoding协议的对象编码为NSData对象

请阅读本栏以便更好地理解plist。。

错误1:您已经有一个全局属性:UILabel*label1,并且您创建了另一个本地属性NSString*label1-->重命名您的属性


错误2:相同的问题

您可以通过将浮点值转换为UIColor,然后转换为最终为字符串的十六进制代码来保存它,并且可以将字符串值存储在NSUserDefaults中。 从UIColor转换为字符串(hexcode)以及从UIColor转换为字符串(hexcode)的代码

-(NSString*)getHexcode::(UIColor *)mycolor {
    const CGFloat *components = CGColorGetComponents(mycolor.CGColor);
    CGFloat r = components[0];
    CGFloat g = components[1];
    CGFloat b = components[2];

    NSString *colorHexCode = [NSString stringWithFormat:@"#%02lX%02lX%02lX", (long)(r * 255.0), (long)(g * 255.0), (long)(b * 255.0)];

    return colorHexCode;
}
然后,您可以使用此函数通过传递hexcode(NSUserdefaults中的字符串值)来获取标签的UIColor

-(UIColor *)colorFromHexString:(NSString *)hexString {
    unsigned rgbValue = 0;

    if([hexString isEqual:@""])
    {
        hexString=defaultGreenColor;
    }

    if([hexString isKindOfClass:[NSNull class]])
    {
        hexString=defaultGreenColor;
    }

    NSScanner *scanner = [NSScanner scannerWithString:hexString];
    [scanner setScanLocation:1]; // bypass '#' character
    [scanner scanHexInt:&rgbValue];

    return [UIColor colorWithRed:((rgbValue & 0xFF0000) >> 16)/255.0 green:((rgbValue & 0xFF00) >> 8)/255.0 blue:(rgbValue & 0xFF)/255.0 alpha:1.0];
}
希望能有帮助