我有一个在 Mac 市场上销售的应用程序,这个应用程序一直运行顺利——直到客户开始在 Mavericks 下运行它。
归结为我从客户那里得到的例外情况:
2013 年 11 月 7 日上午 8:54:17.841 MyApp[65256]:-[Property watts Per Square MeterStringValue]:无法识别的选择器发送到实例 0x7fa66c80a760
现在,很明显“watts Per Square MeterStringValue”不是一个有效的选择器,但让我解释一下。
我在 NSString 上有一个类别,它有一系列方法可以执行不同的操作,例如从字符串中删除空格,或者将字符串的第一个字符设置为小写等。这个类别存在于我嵌入到我的应用程序中的框架中。
该类别中的一种特殊方法是“bindString”,它将字符串转换为可绑定的驼峰式字符串。所以:
[@“这是一个时髦的字符串”bindString]
会产生:
“thisIsAFunkyString”
在 Mavericks 下的我的应用程序中似乎发生的事情是 category 方法并不总是被调用,即使它在源代码中被引用。这种行为纯粹是随机的。在应用程序运行时,有时会调用它,有时不会。如果不是,则会发生上述异常。
这只会在小牛队下发生。相同的二进制文件在 Mountain Lion 和 Lion 下完美运行。
现在我想知道为什么会这样。这是 Mavericks 下的 Obj-C 运行时问题吗?是 Xcode 5.0.1 编译器问题吗?我不知道,但这很奇怪,它把我逼疯了。
我几乎什么都试过了。接下来我要尝试的是将类别 .m 和 .h 从框架中提取出来,并将其直接放入应用程序项目中。
有没有人在小牛队看到过这样的事情?