【问题标题】:Does NSNumber automatically cast strings?NSNumber 会自动转换字符串吗?
【发布时间】:2013-12-02 17:08:43
【问题描述】:

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

@{ SKStoreProductParameterITunesItemIdentifier : @010101010 };

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

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

但是当我将值作为字符串传递时,它可以毫无怨言地工作:

@{ SKStoreProductParameterITunesItemIdentifier : @"010101010" };

这里发生了什么? NSNumber 是否会根据给出的字符串自动创建正确的数字类型?这是发生在NSNumber 还是 StoreKit 这样做?

【问题讨论】:

  • NSDictionary 对象没有显式类型化,那么字典如何知道该值应该是NSNumber?我认为这一定是 StoreKit 的行为。
  • 唯一可行的方法是商店工具包实现实际上是在处理 NSNumberNSString 对象。
  • 那一行不是创建了一个 NSDictionary 实例,因此允许 NSNumber 或 NSString 作为参数吗?
  • 嗯...这很奇怪。字典将接受针对任何键的任何类型。唯一的问题可能发生在 StoreKit 实际尝试处理字典时。你真的把这个传递给 StoreKit 来处理了吗?
  • 是否有可能在幕后调用integerValue(或floatValue等),这只是巧合吗?报价下方的示例显示 iBooks id 是 364709193

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


【解决方案1】:

其实想想……

最初我认为他们必须先将NSString 转换为NSNumber,然后才能执行他们需要做的任何事情来获取您正在寻找的信息。

不过,转念一想……

我猜StoreKit 在字符串中使用value 来对抗SKStoreProductParameterITunesItemIdentifier。在这种情况下,他们会做类似...

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

无论你传入@12345 还是@"12345",这都是一样的。

可能……

虽然没有真正的方法。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 又一个有趣的动态方法解析产品!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多