• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - Swift encodeObjectForKey - 用 nil 更新值

[复制链接]
菜鸟教程小白 发表于 2022-12-11 16:53:25 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我在 SE 的第一篇文章,所以请对我温柔一点....

我是 swift 和 iOS 开发的新手,但在过去的几个月里一直在学习。

我有一个应用程序,用于通过 NSCoderencodeObjectForKey 保存日期和值。我将 NSDate 值传递给它,并且可以毫无问题地对其进行解码。

但是,如果我尝试传入 nil 来覆盖现有值,它似乎不会存储,因为旧值是在值被解码并返回后返回的。

我搜索并发现将 nil 传递给 encodeObjectForKey 方法似乎是有效的,但我找不到任何可以告诉我在使用 nil 过度处理现有值时这是否会起作用的任何信息。

谁能提供有关如何删除现有值的指导?

我的代码:

aCoder.encodeObject(dateSold, forKey: PropertyKey.dateSoldKey)    
let dateSold = aDecoder.decodeObjectForKey(PropertyKey.dateSoldKey) as? NSDate

编辑:似乎我更新的 Nil 日期值没有通过 segue 回到保存更新并调用 encodeObject 的类。我去调查一下。为浪费时间道歉....



Best Answer-推荐答案


我认为,在 解码 时,您可以检查对象是否等于前一个对象。如果对象等于前一个对象,则使其 nil.

//: Playground - noun: a place where people can play

import UIKit
import Foundation

class Dates : NSObject
{
    //MARK: Local Variables

    var createdAt: NSDate?
    var previoudDate : NSDate?

    required convenience init(coder decoder: NSCoder)
    {
        self.init()

        if let proper_CreatedAt = decoder.decodeObjectForKey("YourKey") as? NSDate {

            if let proper_previousDate = self.previoudDate where proper_previousDate == proper_CreatedAt
            {
                decoder.encodeObject(nil, forKey: "YourKey")
                self.createdAt = nil
                self.previoudDate = nil
            }
            else
            {
                self.createdAt = proper_CreatedAt
                self.previoudDate = proper_CreatedAt
            }
        }
        else {
            decoder.encodeObject(nil, forKey: "YourKey")
        }
    }

    convenience init(createdAt : NSDate?)
    {
        self.init()
        self.createdAt = createdAt
    }

    func encodeWithCoder( coder : NSCoder)
    {
         if let proper_previousDate = self.createdAt
        {
        coder.encodeObject(proper_previousDate, forKey: "YourKey")
        }
    }
}

let kk = Dates()
kk.createdAt = NSDate()
print(kk.createdAt)

还找到了两种方法可以帮助您解决这个问题,

decoder.replacementObjectForCoder(NSCoder)
decoder.replacementObjectForKeyedArchiver(NSKeyedArchiver)

但是这些输入类型是 NSCoderNSKeyedArchiver,而不是 key

关于ios - Swift encodeObjectForKey - 用 nil 更新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38177821/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap