NSNumber会自动转换字符串吗?

时间:2013-12-02 17:08:43

标签: ios objective-c cocoa-touch nsnumber storekit

创建SKStoreProductViewController时,我会传递一个带有商店标识符参数的字典。 :

@{ SKStoreProductParameterITunesItemIdentifier : @010101010 };

这个值应该是NSNumber(如上所述):

  

与此键关联的值是NSNumber的一个实例,表示您希望商店在显示视图控制器时显示的项目的iTunes标识符。

但是当我将值作为字符串传递时,它没有抱怨:

@{ SKStoreProductParameterITunesItemIdentifier : @"010101010" };

这里发生了什么? NSNumber是否自动从其提供的字符串中创建正确的数字类型?这是发生在NSNumber还是StoreKit这样做?

2 个答案:

答案 0 :(得分:4)

实际上,想一想......

最初,我认为他们必须先将NSString转换为NSNumber,然后再做他们需要做的事情,以获取您正在寻找的信息。

但是,第二个想法......

我猜是StoreKit在字符串中使用valueSKStoreProductParameterITunesItemIdentifier。在这种情况下,他们会做类似......

NSString *someStringToGetTheResults = [NSString stringWithFormat:@"thisIsThePath...?storeKitID=%@", dictionary[SKStoreProductParameterITunesItemIdentifier]];

无论您传递@12345还是@"12345"

,都是一样的

...可能

虽然没有真正的方法。

答案 1 :(得分:2)

文档说存储在SKStoreProductParameterITunesItemIdentifier键中的值应该是NSNumber。保存该密钥中的任何其他内容今天都可以使用,但也可能在任何操作系统发布后停止工作,所以不要这样做。

正如其他人所建议的那样,商店工具包很可能是获取SKStoreProductParameterITunesItemIdentifier键的值,假设它是一个NSNumber,并发送一个integerValue方法来获取它的数值。你很幸运,因为NSNumber和NSString都有一个integerValue方法。