1

我知道这个问题已经被问过好几次了,但我正在寻找一个更一般的答案。我为 iOS 6 开发了一个应用程序,我在模拟器(Retina 3.5 和 4 英寸)以及 iPhone 4 设备上对其进行了测试。它从未崩溃过,但是当我将应用程序提交给 Apple 时,他们回答说:

我们发现您的应用在运行 iOS 6.1.3 的 iPhone 5 上启动时崩溃,

查看崩溃日志在此处输入图像描述

我们看到它在第 164 行从索引越界崩溃,这是有道理的,因为我在那里有这段代码:在此处输入图像描述

我添加了“如果”以在indexTimesArray大于数组长度时停止执行并查看为什么会发生这种情况,但我无法重现该错误。我从来没有index out of bounds像他们那样...确实,我没有在 iPhone 5 设备上测试过,但我的电脑上有 XCode 4.6 和 iOS 6.1,还有带有 iOS 6.1.3 的 iPhone 4,但它是苹果公司的人也确实让应用程序崩溃了,那么如何重现错误呢?我尝试从TestFlight安装该应用程序,因为它将它安装为一个全新的应用程序,就像他们在测试它时所做的那样,但仍然没有错误......

如何重现错误?这可能是构建设置的问题吗?

谢谢

[编辑] 我在对象的 init 方法中初始化 timesArray 的内容,如下所示:

- (id)init{    
self = [super init];    
df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd HH:mm"];
rangeDates = [[NSArray alloc]initWithObjects:@"2013-04-11 10:00", @"2013-04-12 10:00", @"2013-04-13 10:00", @"2013-04-14 10:00", nil];    
timesArray = [[NSArray alloc]initWithArray:[NSArray arrayWithObjects:@"10:00", @"11:00", @"12:00", @"13:00", @"14:00", @"15:00", @"16:00", @"17:00", @"18:00", @"19:00", @"20:00", @"21:00", @"22:00", nil]];    
colorDictio = [[NSDictionary alloc]initWithObjects:[NSArray arrayWithObjects:[UIColor colorWithRed:0.74 green:0.66 blue:0.37 alpha:1.0], [UIColor colorWithRed:0.64 green:0.15 blue:0.11 alpha:1.0], [UIColor colorWithRed:0.313 green:0.65 blue:0.69 alpha:1.0], [UIColor colorWithRed:0.79 green:0.4 blue:0.59 alpha:1.0], [UIColor colorWithRed:0.45 green:0.55 blue:0.53 alpha:1.0], [UIColor colorWithRed:0.14 green:0.27 blue:0.66 alpha:1.0], nil] forKeys:[NSArray arrayWithObjects:@"showers area", @"zinctalks", @"zincnetwork", @"zincshows", @"zinclabs", @"zinczone", nil] ];
return self;
}
4

3 回答 3

1

要弄清楚如何重现该错误,您必须查看创建 timesArray 的代码。

发生越界错误[timesArray count]是因为小于 2(或整个数组为零)。所以你必须弄清楚哪个条件会导致一个包含一个或零个对象的数组。也许它发生是因为没有互联网连接。

包装 objectAtIndex: 以检查数组的实际大小总是一个好主意。

我将替换else {else if ([timesArray count] >= 2) {添加一个额外的处理 <2 数组的 else 。

于 2013-04-04T08:53:00.870 回答
0

首先,这不是与操作系统相关的错误。您的应用程序正在崩溃,因为正在访问错误的数组索引。

  1. 如何重现错误?:尝试使用您必须提供给苹果的相同凭据。
  2. 这可能是构建设置的问题吗?: 不。

要调试错误,您可以尝试在 if 之前打印 indexTimesArray 的值。此外,尝试打印您传递的所有值以访问数组元素。这将帮助您跟踪正在发送的错误索引。

于 2013-04-04T08:35:50.457 回答
0

感谢@mayur,他的评论是正确的答案,“我之前在Objective-C中遇到过类似的错误......我的建议是将self与NSMutableArrays或NSArrays一起使用”

于 2013-05-01T11:04:12.700 回答