2

我有一个奇怪的问题,希望有人能解释一下。

我在 AppStore 中有一个 ipad 应用程序,它是在 3.2 是 ipad 唯一可用的 iOS 时发布的。应用程序在这个 iOS 上运行良好,但是一旦 ipad 4.2.1 出现,我的一些用户因此更新到新的 iOS,应用程序现在在按下某个 UIBarButtonItem 时崩溃。在从 iOS 3.2 到 iOS 4.2.1 发布的过渡期间,我没有提交任何更新,所以它是在每个 iOS 上运行的完全相同的应用程序,但我只在 4.2 上遇到了这个问题

在管理器中进行符号化并查看分发构建崩溃报告后,我至少能够看到导致此问题的代码行......

while(i < [filteredData count]) {

就是这样!......只是在while循环中进行简单检查。崩溃日志中的最后一件事指向上面的代码行......

filtersData 是一个 NSMutableArray,此时肯定已分配/初始化。它实际上在之前的另一段代码中使用没有问题。同样,这行代码在 iOS 3.2 上给我的应用程序没有问题,但在 iOS 4.2.1 上它会导致 EXC_BAD_ACCESS (SIGSEGV)

当我通过带有调试或发布配置的 xcode 在我的设备上安装应用程序时,它运行良好,但是从 AppStore(分发版)安装时,它崩溃并且仅在 4.2 上!

只是为了澄清......

应用程序在 3.2 上的调试和分发模式下完美运行

应用程序在 4.2 的调试模式下完美运行,但应用程序在 4.2 的分发模式下崩溃

有什么想法吗?.....因为我很困惑/迷路 感谢您抽出宝贵的时间

4

1 回答 1

3

可能是编译器在发布版本中进行的优化导致了这种情况,尤其是当您在调试中没有遇到问题时

能不能重构...

NSUInteger count = [filteredData count];
while(i < count) {

还是filteredData在循环中发生变异?

NSUInteger count = [filteredData count];
while(i < count) {
   blah;
   blah;
   count = [filteredData count];
}
于 2010-12-08T22:19:00.713 回答