1

この質問が何度か聞かれたことは知っていますが、より一般的な回答を探しています。iOS 6 用のアプリを開発しました。シミュレーター (Retina 3.5 および 4 インチ) と iPhone 4 デバイスでテストしました。クラッシュしたことはありませんが、アプリを Apple に送信したところ、次のような回答がありました。

iOS 6.1.3 を実行している iPhone 5 でアプリを起動すると、アプリがクラッシュすることがわかりました。

クラッシュログを見るとここに画像の説明を入力

範囲外のインデックスから 164 行目でクラッシュすることがわかります。これは、次のコードがあるため意味があります。ここに画像の説明を入力

「if」を追加してindexTimesArray、配列の長さよりも大きい場合は実行を停止し、その理由を確認しましたが、エラーを再現できませんでした。私は彼らのように決して得index out of boundsません... iPhone 5デバイスでテストしていないのは事実ですが、私のコンピューターにはXCode 4.6とiOS 6.1があり、iOS 6.1.3のiPhone 4もありますが、また、Apple の担当者がアプリをクラッシュさせていることも事実ですが、エラーを再現するにはどうすればよいでしょうか? テスト時と同じように、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 未満 (または配列全体が nil) であるため、境界外エラーが発生します。したがって、オブジェクトが 1 つまたは 0 の配列につながる条件を特定する必要があります。インターネット接続がないために発生する可能性があります。

配列の実際のサイズのチェックで objectAtIndex: をラップすることは常に良い考えです。

<2 配列を処理する else を置き換えelse {else if ([timesArray count] >= 2) {追加します。

于 2013-04-04T08:53:00.870 に答える
0

@mayur のおかげで、彼のコメントは正しい答えです。

于 2013-05-01T11:04:12.700 に答える