2010-03-04 65 views
2

我試圖使用一些非標準的顏色(即不是UIColor blueColor,但更深的藍色,更深的綠色,紅色等......),當我嘗試將用戶選擇的UIColor對象保存到UserDefaults,這是失敗的。下面是我用來創建自定義顏色的代碼,後面跟着將UIColor對象保存到UserDefaults的代碼。如何將自定義顏色保存到UserDefaults

任何幫助,將不勝感激。

謝謝!

//創建自定義顏色

UIColor *selectedColor = [UIColor colorWithRed:0.0 green:0.5 blue:0.0 alpha:1.0]; 

//保存顏色以用​​戶默認

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
// archive it into a data object 

/*** Fails on this next line ***/  
NSData *dataColor = [NSKeyedArchiver archivedDataWithRootObject: selectedColor]; 

// write the data into the user defaults 
[prefs setObject: dataColor forKey:colorKey]; 

[prefs synchronize]; 

回答

5

這裏的問題是,的UIColor不是「鑰匙編碼」標準(我不是肯定是正確的詞),你應該有這樣的錯誤:

*** -[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value 

它不能保存到NSUSerDefault s,您需要使用NSKeyArchiver保存它們或將顏色值轉換爲符合密鑰代碼的內容。例如,我使用類別遵循了NSStringFromCGRect方法。這是我的代碼:

UIColorAdditions.h

#import <Foundation/Foundation.h> 


@interface UIColor (UIColorAdditions) 

+ (NSString *)stringFromUIColor:(UIColor *)color; 

@end 

@interface NSString (UIColorAdditions) 

+ (UIColor *)colorFromNSString:(NSString *)string; 

@end 

UIColorAdditions.m

#import "UIColorAdditions.h" 

@implementation UIColor (UIColorAdditions) 
+ (NSString *)stringFromUIColor:(UIColor *)color { 
    return [NSString stringWithFormat:@"%@", color ]; 
} 
@end 

@implementation NSString (UIColorAdditions) 
+ (UIColor*)colorFromNSString:(NSString *)string { 
    // The string should be something like "UIDeviceRGBColorSpace 0.5 0 0.25 1 
    NSArray *values = [string componentsSeparatedByString:@" "]; 
    CGFloat red = [[values objectAtIndex:1] floatValue]; 
    CGFloat green = [[values objectAtIndex:2] floatValue]; 
    CGFloat blue = [[values objectAtIndex:3] floatValue]; 
    CGFloat alpha = [[values objectAtIndex:4] floatValue]; 
    UIColor *color = [UIColor colorWithRed:red green:green blue:blue alpha:alpha]; 

    return color; 
} 
@end 

使用的例子:

NSString *strColor = [UIColor stringFromUIColor:[UIColor colorWithRed:0.5 green:0 blue:0.25 alpha:1.0]]; 
[[NSUserDefaults standardUserDefaults] setObject:strColor forKey:kViewBgColorKey]; 

有多種解決方案,(更好的) ,我剛剛發佈了我的。

相關問題