2011-01-25 72 views
1

我有一个NSMutableArray只会在会话期间持续。 目前我创建像这样如何创建新鲜的NSMutableArray?

NSMutableArray *temp = [[NSMutableArray alloc] initWithCapacity:10]; 
    [self setScoreArray:temp]; 
    [temp release]; 

问题是,当我去检查每个索引我得到一个数组outofbounds错误

NSNumber *previousScore = [[self scoreArray] objectAtIndex:[self quizNum]]; 
    if (previousScore != nil) 
    { 
     [self clearQuizBtns]; 
     NSInteger previousScoreValue = [previousScore integerValue]; 
     [self selectButtonAtTag:previousScoreValue]; 
    }else { 
     [self clearQuizBtns]; 
    } 

我在其他职位读取initWithCapacity不实际上创建数组。那么我最初可以填充数组呢? 在此先感谢。

回答

4

两种方式:

第一:启动与NSNull类的默认值

NSMutableArray *temp = [[NSMutableArray alloc] initWithCapacity:10]; 
for (int i = 0 ; i < 10 ; i++) 
{ 
    [temp insertObject:[NSNull null] atIndex:i]; 
} 

[self setScoreArray:temp]; 
[temp release]; 

,然后数组检查:如果对象是一种NSNull类的手段,这是一个以前从未设置

id previousScore = [[self scoreArray] objectAtIndex:[self quizNum]]; 
if (![previousScore isKindOfClass:[NSNull class]]) 
{ 
    [self clearQuizBtns]; 
    NSInteger previousScoreValue = [(NSNumber *)previousScore integerValue]; 
    [self selectButtonAtTag:previousScoreValue]; 
}else { 
    [self clearQuizBtns]; 
} 

第二:店面得分在NSMutableDictionary和使用NSNumber的密钥

// scoreDictionary property of NSMutableDictionary class must be declared in self 

NSNumber *previousScore = [self.scoreDictionary objectForKey:[NSNumber numberWithInt:[self quizNum]]]; 
if (previousScore != nil) 
{ 
    [self clearQuizBtns]; 
    NSInteger previousScoreValue = [previousScore integerValue]; 
    [self selectButtonAtTag:previousScoreValue]; 
}else { 
    [self clearQuizBtns]; 
} 
+0

谢谢。很多答案都很棒。我非常感谢帮助。 – intomo 2011-01-25 20:18:00

0

使用arrayWithObject:或arrayWithObjects:方法可以提供具有预填充值的数组。

2

NSArray不支持“孔”。容量只是初始化程序的提示。

您可以用占位符对象填充数组,或者更通常地,将算法更改为完全预先填充数组或者以线性方式延迟加载它。

2

你的问题似乎是,你从来没有真正设置任何得分数组的分数..你呢?正如你所看到的,NSArrays在其中有实际的count项目,并且访问超出该数目的索引将被炸毁。如果将永远只能是分数的固定(小)数字,比如10,那么你可以初步确定他们所有的东西默认这样的:

for (int i = 0; i < 10; i++) { 
    [temp addObject:[NSNumber numberWithInt:0]]; 
} 

附: -initWithCapacity会“创建数组”,它只是不会在数组中创建任何对象。容量只是一个提示。

0

NSMutableArrays的一个很酷的事情是,你可以做一个“初始化”,数组将处理添加和删除对象。请记住,在处理可变数组时,通常需要addObject:或removeObjectAtIndex:。