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

您的可变数组已达到 0,因为它尚未分配/初始化。你要么必须把它NSMutableArray *myscores = [NSMutableArray array];放在你的 [[self delegate] ] 调用之上。

或者更好的方法是创建您的 myscores 并使用内置的 nsarray 超类方法传递该方法,该方法负责分配/初始化您的数组。

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 回答