gpt4 book ai didi

ios - Swift encodeObjectForKey - 用 nil 更新值

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:59:21 25 4
gpt4 key购买 nike

我在 SE 中的第一篇文章,所以请轻轻地对我....:)

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

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

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

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

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

我的代码:

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

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

最佳答案

我认为,在解码 时,您可以检查对象是否等于前一个对象。如果该对象等于前一个对象,则将其设置为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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com