我有这段代码每五秒更改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];
}
答案 0 :(得分:1)
以下是我的答案:
1)我认为,在最后一个(19),numberCount是20(numberCount ++;)。 2)只需在安排定时器之前设置值。
答案 1 :(得分:0)
将此添加到您的界面中的.h文件中(即,如果它尚未存在)
{
NSInteger numberCount
}
然后在viewDidLoad方法中,初始化numberCount和标签:
numberCount = 0;
label.text = @"0";
在你的时间方法中,替换:
numberCount++
与
if(numberCount++ > 19)
numberCount = 0;
用于什么是“编号”NSString,b.t.w。?
答案 2 :(得分:0)
为什么有dayArray? 为什么不喜欢
label.text = [NSString stringWithFormat:@"Day: %d", numberCount++];
if (numberCount>19) numberCount = 0;
我不知道你有什么数字计数初始化它应该是-1并且也重新初始化为-1。如果你希望通过“Day:0”迭代......“Day:19” 目前尚不清楚。
答案 3 :(得分:0)
您可以将 - (void)viewDidLoad计时器更改为不重复
timer=[NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(rotate3 )userInfo:nil repeats:NO];
然后,如果您仍想在5秒后更改文本,请在rotate3方法中有条件地再次设置它。
答案 4 :(得分:0)
试试这个:
#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.
}