NSMutableArray属性初始化和更新

时间:2012-12-06 03:40:51

标签: ios nsmutablearray initialization nsinteger

假设我有一个@property是一个NSMutablearray,它包含四个对象使用的分数。它们将初始化为零,然后在viewDidLoad和应用程序的整个操作期间进行更新。

出于某种原因,我无法理解需要做的事情,特别是在声明和初始化步骤中。

我相信这可能是私有财产。

@property (strong, nonatomic) NSMutableArray *scores;

@synthesize scores = _scores;

然后在viewDidLoad中我尝试这样的东西,但得到一个错误。我想,我只需要语法方面的帮助。或者我遗漏了一些非常基本的东西。

self.scores = [[NSMutableArray alloc] initWithObjects:@0,@0,@0,@0,nil];

这是初始化它的合适方法吗?那么如何将(NSNumber *)updateValue添加到第n个值?

编辑:我想我想通了。

-(void)updateScoreForBase:(int)baseIndex byIncrement:(int)scoreAdjustmentAmount
{
    int previousValue = [[self.scores objectAtIndex:baseIndex] intValue];
    int updatedValue = previousValue + scoreAdjustmentAmount;
    [_scores replaceObjectAtIndex:baseIndex withObject:[NSNumber numberWithInt:updatedValue]];
}

有更好的方法吗?

1 个答案:

答案 0 :(得分:5)

您正在viewDidLoad初始化,但是您应该在init中进行初始化。

这两者都相似,完全有效。

_scores = [[NSMutableArray alloc] initWithObjects:@0,@0,@0,@0,nil]; 

,或者

self.scores=[[NSMutableArray alloc]initWithObjects:@0,@0,@0, nil];

你的上一个问题...... Then how do I add (NSNumber *)updateValue to, say, the nth value? 如果你addObject:最后会添加它。您需要在所需索引中insertObject:atIndex:,并且所有后续对象都将转移到下一个索引。

 NSInteger nthValue=12;
[_scores insertObject:updateValue atIndex:nthValue];

编辑:

编辑后,

NSInteger previousValue = [[_scores objectAtIndex:baseIndex] integerValue];
NSInteger updatedValue = previousValue + scoreAdjustmentAmount;
[_scores replaceObjectAtIndex:baseIndex withObject:[NSNumber numberWithInt:updatedValue]];