2013-04-19 2 views
0

У меня большая проблема, и я не мог решить ее уже несколько дней.Не удается получить цвет из NSUserDefaults при первом запуске приложения

Когда приложение загружается в первый раз, я сохраняю 4 цвета в NSUserDeafaults в первом UIViewController.

ViewController.m

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 
NSUserDefaults *sharedDefaults = [NSUserDefaults standardUserDefaults]; 
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSInteger countValue = [defaults integerForKey:@"Array"]; 

if ([sharedDefaults boolForKey:@"FirstLaunch"]) 
{ 
    [self openSubView]; 
    [sharedDefaults setBool:NO forKey:@"FirstLaunch"]; 
    [sharedDefaults synchronize]; 
    [self saveColorsToDefaults]; 

    // [prefs synchronize]; 
} // Do any additional setup after loading the view. 
else if(countValue == 1) 
{ 
} 

} 


-(void)saveColorsToDefaults{ 

const CGFloat *components1 = CGColorGetComponents([UIColor darkGrayColor].CGColor); 
const CGFloat *components2 = CGColorGetComponents([UIColor blueColor].CGColor); 
const CGFloat *components3 = CGColorGetComponents([UIColor redColor].CGColor); 
const CGFloat *components4 = CGColorGetComponents([UIColor purpleColor].CGColor); 

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 

[prefs setFloat:components1[0] forKey:@"cr"]; 
[prefs setFloat:components1[1] forKey:@"cg"]; 
[prefs setFloat:components1[2] forKey:@"cb"]; 
[prefs setFloat:components1[3] forKey:@"ca"]; 

[prefs setFloat:components2[0] forKey:@"cr2"]; 
[prefs setFloat:components2[1] forKey:@"cg2"]; 
[prefs setFloat:components2[2] forKey:@"cb2"]; 
[prefs setFloat:components2[3] forKey:@"ca2"]; 

[prefs setFloat:components3[0] forKey:@"cr3"]; 
[prefs setFloat:components3[1] forKey:@"cg3"]; 
[prefs setFloat:components3[2] forKey:@"cb3"]; 
[prefs setFloat:components3[3] forKey:@"ca3"]; 

[prefs setFloat:components4[0] forKey:@"cr4"]; 
[prefs setFloat:components4[1] forKey:@"cg4"]; 
[prefs setFloat:components4[2] forKey:@"cb4"]; 
[prefs setFloat:components4[3] forKey:@"ca4"]; 

[prefs synchronize]; 
NSLog(@"I just saved colors"); 


} 

И после того, как мне нужно, чтобы установить эти цвета `DrawViewControllers чертежные инструменты. Я могу получить только последние 3 цвета, но 1-й цвет не появляется.

Но когда я установил цвет для 1-го инструмента через colorPicker и сохранил все цвета снова до NSUserDefaults, он отлично работает!

-(void)LoadColorsAtStart 
{ 

NSUserDefaults *prefers = [NSUserDefaults standardUserDefaults]; 
UIColor* tColor = [UIColor colorWithRed:[prefers floatForKey:@"cr"] green:[prefers floatForKey:@"cg"] blue:[prefers floatForKey:@"cb"] alpha:[prefers floatForKey:@"ca"]]; 

UIColor* tColor2 = [UIColor colorWithRed:[prefers floatForKey:@"cr2"] green:[prefers floatForKey:@"cg2"] blue:[prefers floatForKey:@"cb2"] alpha:[prefers floatForKey:@"ca2"]]; 

UIColor* tColor3 = [UIColor colorWithRed:[prefers floatForKey:@"cr3"] green:[prefers floatForKey:@"cg3"] blue:[prefers floatForKey:@"cb3"] alpha:[prefers floatForKey:@"ca3"]]; 

UIColor* tColor4 = [UIColor colorWithRed:[prefers floatForKey:@"cr4"] green:[prefers floatForKey:@"cg4"] blue:[prefers floatForKey:@"cb4"] alpha:[prefers floatForKey:@"ca4"]]; 

[prefers synchronize]; 

[self extractRGBforBlack:tColor]; 
[self extractRGBforBlue:tColor2]; 
[self extractRGBforRed:tColor3]; 
[self extractRGBforLine:tColor4]; 

[self.colorBar1 setTextColor:self.blackExtract]; 
[self.colorBar2 setTextColor:self.blueExtract]; 
[self.colorBar3 setTextColor:self.redExtract]; 
[self.colorBar4 setTextColor:self.lineExtract]; 

NSLog(@"I have extracted colors"); 
} 

У меня есть 5 аналогичных DrawViewControllers и все работы с рисованием UIView.

+0

В коде [sharedDefaults boolForKey: @ "FirstLaunch"] всегда будет возвращать NO. При первом запуске приложения этот пользователь по умолчанию не существует, и boolForKey вернет NO, поэтому условный код никогда не будет выполняться. – geowar

+0

Большое спасибо, ваша помощь похожа на свет в конце туннеля ... но я не могу понять, что мне нужно делать. Каково решение? –

+0

На самом деле я понял и [sharedDefaults boolForKey: @ «FirstLaunch»] работает хорошо. Он показывает Subview только в FirstLaunch. Проблема с правильным извлечением первого цвета. –

ответ

0

1.Store UIColor в NSData в NSUserDefaults

NSData *colorData = [NSKeyedArchiver archivedDataWithRootObject:color]; 

2.Retrive UIColor из viewdidload

UIColor *color = [NSKeyedUnarchiver unarchiveObjectWithData:colorData]; 
0

Попробуйте это будет работать без ошибок

1.Store UIColor в NSString в NSUserDefaults

-(void)storeColor 
{ 
    NSString *colString = [NSString stringWithFormat:@"%@", [UIColor whiteColor]]; 
    [[NSUserDefaults standardUserDefaults] setObject:colString forKey:@"keyFontColor"]; 
} 

2.Convert строку в UIColor во время извлечения

-(void)retriveColor 
    NSArray *values = [[[NSUserDefaults standardUserDefaults] objectForKey:@"keyFontColor"] componentsSeparatedByString:@" "]; 
    NSLog(@"%d",[values count]); 
    UIColor *def_color = [[UIColor alloc] init]; 
    if ([values count]==5) { 
     CGFloat red = [[values objectAtIndex:1] floatValue]; 
     CGFloat green = [[values objectAtIndex:2] floatValue]; 
     CGFloat blue = [[values objectAtIndex:3] floatValue]; 
     CGFloat alpha = [[values objectAtIndex:4] floatValue]; 
     def_color = [UIColor colorWithRed:red green:green blue:blue alpha:alpha]; 
     self.dateLabel.textColor = def_color; 

    } 
    else if ([values count]==3) 
    { 
     CGFloat white = [[values objectAtIndex:1] floatValue]; 
     CGFloat alpha = [[values objectAtIndex:2] floatValue]; 
     def_color = [UIColor colorWithWhite:white alpha:alpha]; 
     self.label.textColor = def_color;   

    } 
    else 
    { 
     // its store default value while app loads first time 
     self.label.textColor.textColor = [UIColor blackColor]; 

    } 

} 
Смежные вопросы