首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在NSUserDefaults中保存和加载UIColor

在NSUserDefaults中保存和加载UIColor
EN

Stack Overflow用户
提问于 2009-08-14 01:56:42
回答 6查看 26.6K关注 0票数 55

UIColor保存到NSUserDefaults中然后再将其取出来的最简单方法是什么?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-06-01 23:00:46

使用the accepted answer,您很快就会得到大量的NSKeyed归档文件&到处都是您的代码。一个更简洁的解决方案是扩展UserDefaults。这正是扩展的用途;UserDefaults可能并不了解UIColor,因为UIKit和基础是不同的框架。

斯威夫特

代码语言:javascript
复制
extension UserDefaults {

    func color(forKey key: String) -> UIColor? {
        var color: UIColor?
        if let colorData = data(forKey: key) {
            color = NSKeyedUnarchiver.unarchiveObject(with: colorData) as? UIColor
        }
        return color
    }

    func set(_ value: UIColor?, forKey key: String) {
        var colorData: Data?
        if let color = value {
            colorData = NSKeyedArchiver.archivedData(withRootObject: color)
        }
        set(colorData, forKey: key)
    }

}

Swift 4.2

代码语言:javascript
复制
extension UserDefaults {

    func color(forKey key: String) -> UIColor? {

        guard let colorData = data(forKey: key) else { return nil }

        do {
            return try NSKeyedUnarchiver.unarchivedObject(ofClass: UIColor.self, from: colorData)
        } catch let error {
            print("color error \(error.localizedDescription)")
            return nil
        }

    }

    func set(_ value: UIColor?, forKey key: String) {

        guard let color = value else { return }
        do {
            let data = try NSKeyedArchiver.archivedData(withRootObject: color, requiringSecureCoding: false)
            set(data, forKey: key)
        } catch let error {
            print("error color key data not saved \(error.localizedDescription)")
        }

    }

}

用法

代码语言:javascript
复制
UserDefaults.standard.set(UIColor.white, forKey: "white")
let whiteColor = UserDefaults.standard.color(forKey: "white")

这也可以在Objective-C中使用一个类别来完成。

我已经将Swift文件添加为gist here

票数 74
EN

Stack Overflow用户

发布于 2009-08-14 02:42:01

一种方法可能是将其存档(就像使用NSColor,尽管我还没有测试过):

代码语言:javascript
复制
NSData *colorData = [NSKeyedArchiver archivedDataWithRootObject:color];
[[NSUserDefaults standardUserDefaults] setObject:colorData forKey:@"myColor"];

为了找回它:

代码语言:javascript
复制
NSData *colorData = [[NSUserDefaults standardUserDefaults] objectForKey:@"myColor"];
UIColor *color = [NSKeyedUnarchiver unarchiveObjectWithData:colorData];
票数 134
EN

Stack Overflow用户

发布于 2009-08-14 02:52:44

我自己就知道答案了

保存

代码语言:javascript
复制
const CGFloat  *components = CGColorGetComponents(pColor.CGColor);
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setFloat:components[0]  forKey:@"cr"];
[prefs setFloat:components[1]  forKey:@"cg"];
[prefs setFloat:components[2]  forKey:@"cb"];
[prefs setFloat:components[3]  forKey:@"ca"];

加载

代码语言:javascript
复制
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
UIColor* tColor = [UIColor colorWithRed:[prefs floatForKey:@"cr"] green:[prefs floatForKey:@"cg"] blue:[prefs floatForKey:@"cb"] alpha:[prefs floatForKey:@"ca"]];
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1275662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档