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 货币字符串?
将 SKProduct 价格提取到 UICollectionView 单元格标签中