Как я могу изменить значение NSString каждые N секунд, используя? - PullRequest
0 голосов
/ 08 ноября 2011

У меня есть этот код, чтобы изменять число в NSString каждые пять секунд.

Как я буду поддерживать выполнение чисел в цикле?Теперь он работает с 1 до 19 и останавливается на последнем (19) с символом SIGABRT в строке: label.text = ...

Как начать с первого отображаемого числа (0) до первого таймерапожары?

Вот код:

-(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];

}

Ответы [ 5 ]

1 голос
/ 08 ноября 2011

Вот мои ответы:

1) Я думаю, что в последнем (19) число numberCount равно 20 (numberCount ++;). 2) Просто установите значение перед планированием таймера.

0 голосов
/ 08 ноября 2011

попробуйте это:

#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.
}
0 голосов
/ 08 ноября 2011

Вы можете изменить таймер - (void) viewDidLoad, чтобы он не повторялся

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

затем, условно установите его снова в методе rotate3, если вы все еще хотите изменить текст через 5 секунд.

0 голосов
/ 08 ноября 2011

Почему DayArray?почему не что-то вроде

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

Я не знаю, что у вас есть число, инициализированное для него, должно быть, вероятно, -1, а также повторно инициализировано до -1.если вы хотите перебрать «День: 0» ... «День: 19» Это не ясно.

0 голосов
/ 08 ноября 2011

добавьте это в ваш .h файл в вашем интерфейсе (то есть, если его там еще нет)

{
    NSInteger numberCount
}

Затем в вашем методе viewDidLoad инициализируйте numberCount и метку:

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

А в вашем времени метод замените:

numberCount++

с

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

Для чего используется "номер" строки NSSt, b.t.w.?

...