I have some code that looks like this:
actualColor = 0;
targetColors = [NSArray arrayWithObjects:[UIColor blueColor],
[UIColor purpleColor],
[UIColor greenColor],
[UIColor brownColor],
[UIColor cyanColor], nil];
timer = [NSTimer scheduledTimerWithTimeInterval:3.0
target:self
selector:@selector(switchScreen)
userInfo:nil
repeats:YES];
And in the selector i have this:
- (void) switchScreen
{
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationDelegate:self];
int totalItens = [targetColors count];
NSLog(@"Total Colors: %i",totalItens);
if(actualColor >= [targetColors count])
{
actualColor = 0;
}
UIColor *targetColor = [targetColors objectAtIndex:actualColor];
if(!firstUsed)
{
[firstView setBackgroundColor:targetColor];
[secondView setAlpha:0.0];
[firstView setAlpha:1.0];
firstUsed = YES;
}
else
{
[firstView setBackgroundColor:targetColor];
[secondView setAlpha:1.0];
[firstView setAlpha:0.0];
firstUsed = NO;
}
[UIView commitAnimations];
actualColor++;
}
But it seems that I cannot access my array inside the scheduledTimer Action! Have I perhaps missed something?
arrayWithObjects:returns an autoreleased object, and since you’re not retaining it it’s being deallocated at the end of the run loop, before your timer fires. You want to either retain it or use the equivalent alloc/init method, and release it when you’re done with it. Be sure to read about memory management first though, you’re going to run into all kinds of problems like this until you have a good understanding of it.