0

NSMutableArrayにデータを入力して返すメソッドgetHoleScoreを呼び出しています。呼び出し元のメソッドがアイテムにアクセスできるように配列をコピーしようとしていますが、毎回この例外が発生します。

例外'NSRangeException'、理由:' * -[__ NSArrayM objectAtIndex:]:空の配列の境界を超えたインデックス0'

このサイトで見つけたアレイをコピーする複数の異なる方法を試しましたが、何も機能しないようです。コードは次のとおりです。

Score *theScore = self.roundScore;
NSMutableArray *scores = [[[self delegate]getHoleScore:self score:theScore] mutableCopy];
NSInteger total = 0;

if (theScore) {
    self.playerName.text = theScore.name;
    self.courseName.text = theScore.course;
    self.hole1Field.text = [NSString stringWithFormat:@"%d", [[scores objectAtIndex:0] integerValue]];
    self.hole2Field.text = [NSString stringWithFormat:@"%d", [[scores objectAtIndex:1] integerValue]];
    self.hole3Field.text = [NSString stringWithFormat:@"%d", [[scores objectAtIndex:2] integerValue]];
    self.hole4Field.text = [NSString stringWithFormat:@"%d", [[scores objectAtIndex:3] integerValue]];
    self.hole5Field.text = [NSString stringWithFormat:@"%d", [[scores objectAtIndex:4] integerValue]];

スコア配列にデータを入力する方法について何かアイデアはありますか?

4

2 に答える 2

1

可変配列はまだalloc/initになっていないため、0に到達しています。これNSMutableArray *myscores = [NSMutableArray array];を[[自己委任]]呼び出しの上に配置する必要があります。

または、これを行うためのより良い方法は、myscoresを作成し、この組み込みのnsarrayスーパークラスメソッドを使用してメソッドを渡すことです。これにより、配列のalloc/initが処理されます。

NSMutableArray *myscores = [NSMutableArray arrayWithArray:[[self delegate] getHoleScore:self score:theScore];

また、空の配列が送信されていないことを確認して [[self delegate]getHoleScore:self score:theScore]ください。空の配列で-objectAtIndex:aを呼び出すと、コードがクラッシュします。配列が空かどうかを確認する良い方法は、配列でmethod -countメソッドを呼び出すことです。配列でcountを呼び出しても、コードがゼロであってもクラッシュしません。

于 2012-10-06T17:27:46.163 に答える
0

皆さんの助けに感謝します。getHoleScoreが何も返さなかったのは正しかったです。sqliteデータベースで動作していましたが、クリアしてからデータを再追加すると、すべて正常に動作しました。

于 2012-10-08T18:15:13.220 に答える