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

Posted

技术标签:

【中文标题】无法按产品标识符从数组中找到 SKProduct【英文标题】:Cannot find SKProduct from array by product identifier 【发布时间】:2014-07-16 10:50:48 【问题描述】:

我是 ios 编程的新手,来自 C# 背景,所以请多多包涵!

作为我尝试将 IAP 添加到我正在开发的应用程序的一部分,我必须遍历 SKProductsResponse 中返回的产品以查找我的客户选择的产品(因为不推荐使用 paymentWithProductIdentifier)。

在下面的代码中,我知道我的 NSDictionary 中的 productSKU 肯定与产品标识符之一匹配(至少,在控制台中执行 po 显示它是相同的......)但 if 语句永远不会运行。我做错了什么?我尝试将双方都转换为 NSString ,但没有成功。另外,有没有比循环遍历更好的方法来从 SKProductsResponse 中的 productidentifier 中找到产品?

SKProduct *product;
for (SKProduct *thisProduct in products) 
    if (thisProduct.productIdentifier == payload[@"productSKU"]) 
         product = thisProduct;
    

谢谢

克里斯

编辑:

好的,所以我找到了如果我替换

if (thisProduct.productIdentifier == payload[@"productSKU"]) 

if ([thisProduct.productIdentifier isEqualToString:payload[@"productSKU"]])

它有效。谁能解释为什么?我认为这是某种类型的选角问题,但我已经尝试过了

if ((NSString *)thisProduct.productIdentifier == (NSString *)payload[@"productSKU"]) 

没有成功!

【问题讨论】:

你是如何设定产品价值的? 正如我在问题中所说,产品来自 SKProductsResponse。我已经知道 products 包含正确的东西,因为正如我在问题中所说,我可以在循环中对 thisproduct.productIdentifier 执行 po 并查看正确的标识符。 我也许应该提到 products 是一个 NSArray 谢谢,我应该多注意这个问题。如果您有多个 SKProduct,那么不幸的是,这是最快的方法。如果您只有一种产品,请使用 [response.product objectAtIndex:0] "==" 比较指针。 isEqualToString 方法比较字符串中的实际字符。 【参考方案1】:

如果您有多个 SKProduct,那么不幸的是,这是最快的方法。如果您只有一种产品,请使用[response.product objectAtIndex:0]

【讨论】:

以上是关于无法按产品标识符从数组中找到 SKProduct的主要内容,如果未能解决你的问题,请参考以下文章

从 SKPaymentTransaction 获取订阅价格

SKProduct 第一次返回 nil,稍后工作

SKProduct Swift - 信息从何而来?

how to generate a SKProduct directly

iOS SKProduct 如何获取IAP的免费试用信息?

无法在应用购买中从 iTunes Connect 获取产品标识符?