【问题标题】:objectForKeyedSubscript: crash on iOS 5.1objectForKeyedSubscript:在 iOS 5.1 上崩溃
【发布时间】:2012-11-24 19:14:22
【问题描述】:

我正在运行一些执行 [NSDictionary objectForKeyedSubscript:] 的代码,它在 iOS 5 上崩溃,但在 iOS 6 上没有崩溃。我正在使用 xcode 4.5.2 并针对 iOS 6.0 SDK 进行编译。

我认为这可以在 iOS 5 上运行,因为它只是一个编译器功能?我错了吗?我可以编写我自己版本的这些函数,但我担心会出现其他问题,因为我希望它能够工作。

【问题讨论】:

    标签: objective-c ios5 ios6


    【解决方案1】:

    NSDictionary reference for IOS in Apple developer

    适用于 iOS 6.0 及更高版本。

    【讨论】:

      【解决方案2】:

      好的,我会回答我自己的问题,虽然我不完全明白为什么会失败。

      使用objectForKeyedSubscript: 等可以在 iOS 5 中正常运行(只要它是针对 iOS 6 SDK 编译的)。

      问题是我将一个函数命名为+(void)load 并在此函数中调用objectForKeyedSubscript: 会由于找不到方法而导致断言。

      这是我的命名错误,因为在应用程序完全运行之前调用了加载方法。我已经更改了函数的名称,一切都很好。

      我假设 +load 在完全启动 NSDictionary 之前被调用。奇怪的是它可以在 iOS 6 下运行,而不是在 iOS 5 下运行。

      也许这并不奇怪。

      【讨论】:

      • 问题是这些函数被编译到iOS 6中,但在iOS 5中它们被添加到内部类的“加载”函数中。如果该顺序错误(不能保证顺序),那么您的类将在运行时实际添加它之前尝试使用它。这里有一些细节 -> mikeash.com/pyblog/…
      【解决方案3】:

      iOS6 之前的 SDK 有一个解决方法

      在这里结帐问题:Is there any way to get the neat Objective-C literal indexing feature in Xcode 4.4?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-25
        • 2022-12-20
        相关资源
        最近更新 更多