0

iPad でアプリケーションを実行するとアプリケーションがクラッシュしますが、iPad シミュレーターでは 100% 動作します。iPad ではバージョン 4.6.1 の Xcode とバージョン 6.1.3 を使用しています。問題は、セグエ間で int の値を渡そうとしているところにあります

私の.hで

@property (nonatomic, assign)int currentQuestion;

私の.mで

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"level1correct"]){
    AddLevel1IncorrectViewController *incorrect = [segue destinationViewController];
    incorrect.CQValue = self.currentQuestion;
}}

AddLevel1Incorrect.h

@property (nonatomic, assign)int CQValue;

AddLevel1Incorrect.m

@synthesize CQValue = _CQValue;

- (void)imageSelect{
int numItems = [arrayPath count];
NSMutableArray *left = [NSMutableArray arrayWithCapacity:numItems];
NSMutableArray *right = [NSMutableArray arrayWithCapacity:numItems];

for (NSDictionary *itemData in arrayPath) {
    [left addObject:[itemData objectForKey:@"L"]];
    [right addObject:[itemData objectForKey:@"R"]];
}

NSLog(@" value of %d CQValue ", self.CQValue);
leftImageViewer.image = [UIImage imageNamed:left[self.CQValue]];//this is the point where the crash happens
rightImageViewer.image = [UIImage imageNamed:right[self.CQValue]];
}

興味深いのは、クラッシュ メッセージの上部に表示されるように、コンソールの NSLog に正しい値が表示されることです。

2013-04-03 22:50:00.404 thefyp[1506:907]  value of 1 CQValue 
2013-04-03 22:50:00.408 thefyp[1506:907] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 1 beyond bounds for empty array'
*** First throw call stack:

ここで私が間違っているアイデアはありますか?

4

1 に答える 1

2

あなたのコードは非常に脆弱です。つまり、データが正確であることを確認せずに、処理しているデータについて多くの仮定を行っています。

配列にアクセスする前に、配列の境界を確認することはありません。 self.CQValueは 1 ですが、この場合、配列自体は空です。so left[self.CQValue]、 is left[1]、これは無効です。

arrayPathでないことを確認してください。

于 2013-04-03T22:03:57.063 に答える