swift - Swift 中 SKProduct 的 NSCoding 错误

标签 swift realm nscoding nskeyedarchiver skproduct

我正在尝试将 SKProduct 保存在 Realm 中,但在乞求时,我正在尝试将 SKProduct 转换为 NSData,但收到此错误由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[SKProduct” encodeWithCoder:]: 无法识别的选择器发送到实例 0x14f5cd200' *

我的类(class)

import Foundation
import StoreKit

class ProductDataModel: NSObject, NSCoding {

    var product = SKProduct()

    // MARK: - var and let
    private let coderKey = "ProductDataModel"

    override init() {
        super.init()
    }

    convenience init(product: SKProduct) {
        self.init()
        self.product = product
    }

    required init?(coder aDecoder: NSCoder) {
        self.product = aDecoder.decodeObjectForKey(coderKey) as! SKProduct

    }

    func encodeWithCoder(aCoder: NSCoder) {
        aCoder.encodeObject(self.product, forKey: coderKey)
    }
}

我尝试将其存档到另一个类中

 let productData = ProductDataModel(product: product)
 let data = NSKeyedArchiver.archivedDataWithRootObject(productData)

我用了不同的方法,但结果是一样的。我该如何修复它?

最佳答案

我们通过将 SKProduct 数组粘贴到单例并使用它来解决这个问题。我知道这是一个糟糕的解决方案,但我不知道还有其他解决方案。

关于swift - Swift 中 SKProduct 的 NSCoding 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37253829/

相关文章:

swift - 添加 NSCoding 作为扩展

ios - 是否有可能检测到任一用户已从 xcode 10.x 在 iPhone 上选择暗模式

ios - 如何更改 Swift header ("ProductModuleName-Swift.h") 产品名称作为产品名称动态变化

ios - 使用必要的数据源和委托(delegate)扩展 UIView

ios - [Realm - swift ]- 属性 'id_lesson' 的可为空性已从 '1' 更改为 '0'

ios - 检查类型为 "NeXT/Apple typedstream"版本 4 (NSArchiver) 的文件

cocoa - 在 Swift 中使用核心数据实现枚举的最佳方式

ios - Realm - 删除后无法使用对象

java - 关闭和重新打开 Realm 实例是否对性能不利?

ios - NSCoding 意外发现 nil