为了账号安全,请及时绑定邮箱和手机立即绑定

将UIColor保存到NSUserDefaults并从NSUserDefaults加载

/ 猿问

将UIColor保存到NSUserDefaults并从NSUserDefaults加载

iOS
守着一只汪 2019-09-05 12:05:05

将UIColor保存到NSUserDefaults并从NSUserDefaults加载

什么是保存最简单的方法UIColor进入NSUserDefaults,然后拿回来了呢?


查看完整描述

3 回答

?
翻阅古今

通过接受的答案,您将很快在代码中获得大量NSKeyed归档和解压缩。更清洁的解决方案是扩展UserDefaults。这正是扩展的目的; UserDefaults可能不知道UIColor,因为UIKit和Foundation是不同的框架。

迅速

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

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)")
        }

    }}

用法

UserDefaults.standard.set(UIColor.white, forKey: "white")let whiteColor = UserDefaults.standard.color(forKey: "white")

这也可以在具有类别的Objective-C中完成。

我已经添加了斯威夫特文件作为依据这里



查看完整回答
反对 回复 2019-09-10
?
慕慕森

这样做的一种方法可能是归档它(就像使用NSColor,虽然我没有测试过这个):

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

并把它拿回来:

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



查看完整回答
反对 回复 2019-09-10
?
浮云间

我自己得到了答案

保存

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"];

加载

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



查看完整回答
反对 回复 2019-09-10

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信