0

I am simply just trying to update my score in the 'score' nsmutable array which was defined in the (id) type function called when my app is run. So I have no clue what is going wrong, I put in a NSLog before the body of the function and after to check what is happening and I will post them after the code.

-(void)changeScore:(int)moves AtLevel:(int)theLevel{
for (int i = 0; i < 20; i++) {
    NSLog(@"At level %d we have a score of: %d ", i+1, [[scores objectAtIndex:i] intValue]);
}
if (theLevel <= 9){
    NSNumber* number = [[NSNumber alloc]initWithInt:50 - moves];
    [scores replaceObjectAtIndex:theLevel - 1 withObject:number];
    NSLog(@"this is number's int value: %d and this is thelevel - 1: %d", [number intValue], theLevel - 1);
}
if (theLevel > 9 && theLevel <= 19){
    NSNumber* number = [[NSNumber alloc]initWithInt:150-moves];
    [scores replaceObjectAtIndex:theLevel - 1 withObject:number];
}
for (int i = 0; i < 20; i++) {
    NSLog(@"At level %d we have a score of: %d", i+1, [[scores objectAtIndex:i] intValue]);
}
}

and the NSLog produces this:

2012-04-14 14:53:49.018 Arctic Defender[2068:f803] At level 1 we have a score of: 0 
2012-04-14 14:53:49.022 Arctic Defender[2068:f803] At level 2 we have a score of: 0 
2012-04-14 14:53:49.023 Arctic Defender[2068:f803] At level 3 we have a score of: 0 
2012-04-14 14:53:49.024 Arctic Defender[2068:f803] At level 4 we have a score of: 0 
2012-04-14 14:53:49.026 Arctic Defender[2068:f803] At level 5 we have a score of: 0 
2012-04-14 14:53:49.027 Arctic Defender[2068:f803] At level 6 we have a score of: 0 
2012-04-14 14:53:49.028 Arctic Defender[2068:f803] At level 7 we have a score of: 0 
2012-04-14 14:53:49.029 Arctic Defender[2068:f803] At level 8 we have a score of: 0 
2012-04-14 14:53:49.030 Arctic Defender[2068:f803] At level 9 we have a score of: 0 
2012-04-14 14:53:49.031 Arctic Defender[2068:f803] At level 10 we have a score of: 0 
2012-04-14 14:53:49.032 Arctic Defender[2068:f803] At level 11 we have a score of: 0 
2012-04-14 14:53:49.033 Arctic Defender[2068:f803] At level 12 we have a score of: 0 
2012-04-14 14:53:49.035 Arctic Defender[2068:f803] At level 13 we have a score of: 0 
2012-04-14 14:53:49.036 Arctic Defender[2068:f803] At level 14 we have a score of: 0 
2012-04-14 14:53:49.101 Arctic Defender[2068:f803] At level 15 we have a score of: 0 
2012-04-14 14:53:49.102 Arctic Defender[2068:f803] At level 16 we have a score of: 0 
2012-04-14 14:53:49.103 Arctic Defender[2068:f803] At level 17 we have a score of: 0 
2012-04-14 14:53:49.104 Arctic Defender[2068:f803] At level 18 we have a score of: 0 
2012-04-14 14:53:49.104 Arctic Defender[2068:f803] At level 19 we have a score of: 0 
2012-04-14 14:53:49.105 Arctic Defender[2068:f803] At level 20 we have a score of: 0 
2012-04-14 14:53:49.106 Arctic Defender[2068:f803] this is number's int value: 38 and this is thelevel - 1: 0
2012-04-14 14:53:49.111 Arctic Defender[2068:f803] At level 1 we have a score of: 0
2012-04-14 14:53:49.112 Arctic Defender[2068:f803] At level 2 we have a score of: 0
2012-04-14 14:53:49.113 Arctic Defender[2068:f803] At level 3 we have a score of: 0
2012-04-14 14:53:49.114 Arctic Defender[2068:f803] At level 4 we have a score of: 0
2012-04-14 14:53:49.114 Arctic Defender[2068:f803] At level 5 we have a score of: 0
2012-04-14 14:53:49.135 Arctic Defender[2068:f803] At level 6 we have a score of: 0
2012-04-14 14:53:49.136 Arctic Defender[2068:f803] At level 7 we have a score of: 0
2012-04-14 14:53:49.137 Arctic Defender[2068:f803] At level 8 we have a score of: 0
2012-04-14 14:53:49.138 Arctic Defender[2068:f803] At level 9 we have a score of: 0
2012-04-14 14:53:49.157 Arctic Defender[2068:f803] At level 10 we have a score of: 0
2012-04-14 14:53:49.159 Arctic Defender[2068:f803] At level 11 we have a score of: 0
2012-04-14 14:53:49.160 Arctic Defender[2068:f803] At level 12 we have a score of: 0
2012-04-14 14:53:49.160 Arctic Defender[2068:f803] At level 13 we have a score of: 0
2012-04-14 14:53:49.163 Arctic Defender[2068:f803] At level 14 we have a score of: 0
2012-04-14 14:53:49.165 Arctic Defender[2068:f803] At level 15 we have a score of: 0
2012-04-14 14:53:49.166 Arctic Defender[2068:f803] At level 16 we have a score of: 0
2012-04-14 14:53:49.167 Arctic Defender[2068:f803] At level 17 we have a score of: 0
2012-04-14 14:53:49.169 Arctic Defender[2068:f803] At level 18 we have a score of: 0
2012-04-14 14:53:49.170 Arctic Defender[2068:f803] At level 19 we have a score of: 0
2012-04-14 14:53:49.171 Arctic Defender[2068:f803] At level 20 we have a score of: 0

EDIT: this is my score initalize code:

-(id)initNewScores{
//Initalize 20 levels
for (int i = 0; i < 20; i++) {
    NSNumber* numb = [[NSNumber alloc] initWithInt:0];
    [scores addObject:numb];
    [numb release];
}
return self;
}

1 Answer 1

4

Show the value of scores on entry to that method. I bet it is nil. I.e. whatever you are using to initialize that mutable array isn't working.

Sign up to request clarification or add additional context in comments.

5 Comments

But I just called objectAtIndex on all 20 indices, wouldn't I get an error if it was nil?
No, messages sent to nil result in nil. If this wasn't the case, all of Cocoa would explode in a big fireball
Elementary mistake which even experienced programmers do, forgetting to initialise their arrays... Always look for the simple solution first! (myArray = [[NSMutableArray alloc] init])
@PeterP In Cocoa, messages sent to nil don't return errors — they're usually just no-ops, and always return 'falsy' values (nil, 0, NO). Messaging nil is a feature of Cocoa, and won't throw exceptions or anything like that.
Thanks guys, just allocing and initing my array worked, thanks, I totally wasnt thinking that my array was nil beause it was supposed to be initalized as all 0. Thanks

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.