2014-10-20 17 views
6

Tôi gặp vấn đề với lưu màu trong NSUserDefaults. Trong mục tiêu-c rất dễ dàng:Làm thế nào để lưu một màu trong NSUserDefaults nhanh chóng?

-(NSColor *)colorForKey:(NSString *)key{ 
NSData *data; 
NSColor *color; 
data = [[NSUserDefaults standardUserDefaults] objectForKey:key]; 
color= [NSUnarchiver unarchiveObjectWithData:data]; 
if(! [color isKindOfClass:[NSColor class]]){ 
    color = nil; 
} 
return color; 
} 

-(void)setColor:(NSColor *)color forKey:(NSString *)key{ 
    NSData *data = [NSArchiver archivedDataWithRootObject:color]; 
    [[NSUserDefaults standardUserDefaults] setObject:data forKey:key]; 
} 

Mã trên hoạt động tốt trong mục tiêu-c, nhưng khi tôi cố gắng viết mã nhanh, tôi nhận được lỗi đọc màu từ NSUserDefaults.

func saveColorForKey (color:NSColor , key:NSString) { 

    var data:NSData = NSData() 
    data = NSArchiver.archivedDataWithRootObject(color) 
    NSUserDefaults.standardUserDefaults().setObject(data, forKey: key) 
} 
func colorForKey(key:NSString) -> NSColor{ 
    var data: AnyObject? = NSUserDefaults.standardUserDefaults().objectForKey(key) 
    var color: AnyObject? = NSUnarchiver.unarchiveObjectWithData(data? as NSData) 

    return color as NSColor 
} 

Cảm ơn và xin lỗi vì tiếng anh của tôi!

+0

nơi đánh dấu nếu câu trả lời của tôi là đúng để trong tương lai điều này sẽ giúp người khác. cảm ơn –

Trả lời

11

Đối với Objective C

nơi như thế này.

NSData *colorData = [NSKeyedArchiver archivedDataWithRootObject:color]; 
[[NSUserDefaults standardUserDefaults] setObject:colorData forKey:@"myColor"]; 

Để quay lại như thế này.

NSData *colorData = [[NSUserDefaults standardUserDefaults] objectForKey:@"myColor"]; 
UIColor *color = [NSKeyedUnarchiver unarchiveObjectWithData:colorData]; 

Đối Swift

bộ như thế này

var userSelectedColor : NSData? = (NSUserDefaults.standardUserDefaults().objectForKey("UserSelectedColor") as? NSData) 

if (userSelectedColor != nil) { 
    var colorToSetAsDefault : UIColor = UIColor.redColor() 
    var data : NSData = NSKeyedArchiver.archivedDataWithRootObject(colorToSetAsDefault) 
    NSUserDefaults.standardUserDefaults().setObject(data, forKey: "UserSelectedColor") 
    NSUserDefaults.standardUserDefaults().synchronize() 
    println("SET DEFAULT USER COLOR TO RED") 
} 

có được như thế này.

if let userSelectedColorData = NSUserDefaults.standardUserDefaults().objectForKey("UserSelectedColor") as? NSData { 
    if let userSelectedColor = NSKeyedUnarchiver.unarchiveObjectWithData(userSelectedColorData) as? UIColor { 
     println(userSelectedColor) 
    } 
} 
+0

Đó là Mục tiêu-C. Câu hỏi là làm thế nào để thực hiện nó trong * Swift *. –

+0

đã cập nhật câu trả lời. –

0

Lưu trữ một thể hiện NSColor ở giá trị mặc định sử dụng

cửa hàng giá trị trong aColor ở giá trị mặc định sử dụng như giá trị cho khóa AKey

NSData * theData = [NSArchiver archivedDataWithRootObject: aColor]; [[NSUserDefaults standardUserDefaults] setObject: theData forKey: aKey];

Các vấn đề liên quan