2013-04-04 134 views
1

我知道这个问题已被问了好几次,但我寻找一个更一般的答案。 我已经开发了iOS 6的应用程序,我在模拟器(Retina 3.5和4英寸)以及iPhone 4设备上进行了测试。 它从来没有崩溃,但是当我提交的应用程序,以苹果和他们回答:苹果拒绝我的应用程序崩溃在iphone 5

我们发现您的应用一经推出在iPhone 5运行iOS 6.1.3坠毁,

综观崩溃日志enter image description here

我们看到,它在管线164从索引出界,这是有道理的,因为我有这样的代码有崩溃:enter image description here

我补充说“如果“停止执行,只要indexTimesArray大于数组的长度并查看发生的原因,但我无法重现该错误。我从来没有像他们那样得到index out of bounds ... 确实,我没有在iPhone 5设备上测试它,但我的电脑上有XCode 4.6和iOS 6.1,而且还有iOS 6.1.3的iPhone 4,但苹果公司的这些人正在让应用程序崩溃,所以如何重现错误呢? 我试图安装从TestFlight的应用程序,因为它安装它作为一个全新的应用程序,就像他们在测试时一样,但仍然没有错误...

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

由于

[编辑] 我初始化timesArray的内容中的对象的init方法中,这样的:

- (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; 
} 
+0

我面临与Objective-C中的数组相似的错误...我的建议是使用NSMutableArrays或NSArrays。 – mayuur 2013-04-04 08:41:34

+0

你的意思是声明数组作为一个属性? – subharb 2013-04-04 09:06:56

+0

用属性'@property(nonatomic,retain)NSMutableArray * timesArray;' – mayuur 2013-04-04 09:13:30

回答

0

由于@mayur,他的评论是正确的答案,“我曾经遇到过类似的错误早些时候在Objective-C的数组...我的建议是使用具有NSMutableArrays或NSArrays自我”

0

这一切首先是不相关的一个OS错误。您的应用程序正在崩溃,因为正在访问错误的数组索引。

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

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

+0

你凭什么认证?另外请记住,使用我拥有的工具我从来没有得到索引越界,我需要的是重现苹果的环境或为什么它与他们而不是与我坠毁。 – subharb 2013-04-04 09:02:44

1

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

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

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

我会用else if ([timesArray count] >= 2) {替换else {,并添加一个处理< 2个数组的另外一个数组。

+0

为什么你说错误来自长度小于2?我认为这是一个越界,无论如何,我从来没有得到这个错误,我需要的是能够重现苹果说这个应用程序崩溃的环境 – subharb 2013-04-04 09:03:40

+0

因为这是片段可以抛出超出界限错误的唯一方式。 (除了多线程竞态条件之外)if条件的“then”部分仅在边界允许时执行。这个例外不会发生在那里。当“count - 2”为0或更大时,“else”部分不会发生异常。所以唯一可能导致异常的是少于2个对象的数组。 – 2013-04-04 09:58:28

+0

另一个问题是如果你真的得到一个越界异常。也许你的代码试图访问无效的内存,因为你犯了内存管理错误 – 2013-04-04 10:03:37