如何在本地保存 SKProduct 对象?
Posted
技术标签:
【中文标题】如何在本地保存 SKProduct 对象?【英文标题】:How to save SKProduct object locally? 【发布时间】:2013-01-06 02:48:23 【问题描述】:我尝试使用 NSKeyedArchiver 类存档 SKProduct 对象来保存它,但它会生成错误 -[SKProduct encodeWithCoder:]: unrecognized selector sent to instance。
+ (void)saveProduct:(SKProduct *)product
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:product];
[[NSUserDefaults standardUserDefaults] setValue:data forKey:PRODUCT];
[[NSUserDefaults standardUserDefaults] synchronize];
有没有办法保存 SKProduct 的实例?
【问题讨论】:
不确定您要在这里做什么。你为什么想做这个?我宁愿在需要时从 App Store 重新加载产品,以确保该产品仍然可用并检查其价格。此外,您不知道 store kit 和SKProduct
如何与 App Store 通信,以及 SKProduct
如何与 store kit 的其余部分连接。
每次请求数据来检索所有产品是一个耗时的,并且对于自省来说,一次足以确保价格。
好吧,即使你知道价格,你也很可能无法带着它去SKPaymentQueue
,因为它不会与商店的其他工具包正确“连接” .另请参阅@endy 对此的评论。如果您真的很想节省时间,可以在后台某处加载它,但每次启动至少一次。
【参考方案1】:
您的 SKProduct 类需要符合 NSCoding 协议。
换句话说,您需要在您的 SKProduct 类中填写这两个方法。
(void)encodeWithCoder:(NSCoder *)aCoder; (id)initWithCoder:(NSCoder *)aDecoder;这将获取您的 SKProduct 类并将其分解,以便可以对其进行序列化和反序列化。
【讨论】:
所以我需要创建一个类别来添加这两种方法。除了这个,还有其他方法可以保存它吗? 我没有意识到 SKProduct 是一个 Apple 类。事实上,SKProduct 类可能有很多私有属性,并且序列化它们可能属于使用私有 API 的范畴。不包括私有属性不会产生您想要的结果。我建议重新考虑为什么需要序列化这些对象并寻找替代方案。以上是关于如何在本地保存 SKProduct 对象?的主要内容,如果未能解决你的问题,请参考以下文章