Swift 中 SKProduct 的 NSCoding 错误

Posted

技术标签:

【中文标题】Swift 中 SKProduct 的 NSCoding 错误【英文标题】:NSCoding error with SKProduct in Swift 【发布时间】:2016-05-16 12:21:27 【问题描述】:

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

我的班级

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 可能会使用私有 API。我建议只从中获取和存储所需的信息 How to save SKProduct object locally?的可能重复 @sargeras 不,不是。我阅读了这个问题和答案,但我无法快速在 SKProduct 扩展中实现 SKProduct 需要符合 NSCoding,你可以通过创建一个扩展来做到这一点,但我绝对觉得这是不允许的...... @sargeras 是的,我试过了 【参考方案1】:

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

【讨论】:

以上是关于Swift 中 SKProduct 的 NSCoding 错误的主要内容,如果未能解决你的问题,请参考以下文章

如何将 SKProduct 价格格式化为 Swift 货币字符串?

产品在 Swift 语言中请求崩溃

模拟SKProduct,SKProductDiscount

将 SKProduct 价格提取到 UICollectionView 单元格标签中

获取以美元为单位的 SKProduct 价格,而不是商店区域设置价格

无法按产品标识符从数组中找到 SKProduct