chief_bus
chief_bus

Reputation: 15

How can I change the value of an NSString every N seconds using?

I have this code to change the number in the NSString every five seconds.

How will I keep the numbers running in a loop? It now runs from 1 to 19 ,and stops at the last one (19) with a SIGABRT on the line: label.text = ...

How can I start with the first number displayed (0), before the first timer fires?

Here is the code:

-(IBAction) rotate3

{


    NSString *number = [self.dayArray description];

    NSArray *array = [[NSArray alloc] initWithObjects: @"0", @"1", @"2",..., @"19",nil];

    number =  @"0" ;
    numberCount++ ;


    self.dayArray = array;
    [array release];


    label.text = [NSString stringWithFormat:@"Day: %@ ", [dayArray objectAtIndex   :numberCount ]];


}

//and the timer

- (void)viewDidLoad

{

    timer=[NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(rotate3 )userInfo:nil repeats:YES];

}

Upvotes: 0

Views: 258

Answers (5)

AntonioHL
AntonioHL

Reputation: 728

try this:

#pragma mark - timer callback

-(IBAction)rotate3
{
    [label1 setText:[dayArray objectAtIndex:numberCount]];
    numberCount++;
    if (numberCount >= [dayArray count])
        numberCount = 0;
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];
    dayArray = [[NSArray alloc] initWithObjects:@"0",@"1",@"2",@"3", nil];
    [label1 setText:[dayArray objectAtIndex:0]];
    numberCount = 1;
    timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(rotate3) userInfo:nil repeats:YES];
    // Do any additional setup after loading the view, typically from a nib.
}

Upvotes: 0

Jesse Black
Jesse Black

Reputation: 7986

You could change the -(void)viewDidLoad timer to not repeat

timer=[NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(rotate3 )userInfo:nil repeats:NO];

then, conditionally set it up again in the rotate3 method if you still want to change the text 5 seconds later.

Upvotes: 0

John
John

Reputation: 44

Why have dayArray? why not something like

label.text = [NSString stringWithFormat:@"Day: %d", numberCount++];
if (numberCount>19) numberCount = 0;

I don't know what you have number count initialized to it should probably be -1 and also reinitialized to -1 . if you wish to iterate thru "Day: 0" ... "Day: 19" It's not clear.

Upvotes: 0

Michael Dautermann
Michael Dautermann

Reputation: 89569

add this to your .h file, in your interface (that is, if it isn't already there)

{
    NSInteger numberCount
}

Then in your viewDidLoad method, initialize numberCount and the label:

numberCount = 0;
label.text = @"0";

And in your time method, replace:

numberCount++

with

if(numberCount++ > 19)
    numberCount = 0;

What is the "number" NSString used for, b.t.w.?

Upvotes: 0

nguyenhuuhuy tg
nguyenhuuhuy tg

Reputation: 9

Here is my answers:

1)I think, at the last one (19), the numberCount is 20 (numberCount++ ;). 2)Just set the value before scheduling the timer.

Upvotes: 1

Related Questions