Objective-C:复制返回的NSMutableArray

时间:2012-10-06 16:53:14

标签: objective-c nsmutablearray

我正在调用一个方法getHoleScore来填充NSMutableArray并返回它。我正在尝试复制数组,以便调用方法可以访问项目但我每次都得到此异常:

异常'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]];

关于如何填充得分数组的任何想法?

2 个答案:

答案 0 :(得分:1)

你的可变数组达到0,因为它还没有为alloc / init。您必须将此NSMutableArray *myscores = [NSMutableArray array];置于[[self delegate]]调用之上。

或者更好的方法是创建你的myscores并使用这个内置的nsarray超类方法传递方法,该方法负责处理你的数组的alloc / init。

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

也确保这一点  [[self delegate]getHoleScore:self score:theScore]没有向您发送一个空数组,调用-objectAtIndex:空数组上的a将导致代码崩溃。检查数组是否为空的好方法是在数组上调用方法-count方法,调用数组上的count不会导致代码崩溃,即使它是零。

答案 1 :(得分:0)

嘿,谢谢大家的帮助。你是对的,getHoleScore返回的内容为零。它正在处理一个sqlite数据库但是一旦我清除它然后重新添加数据,一切正常。