2013-03-20 2 views
-3

У меня этот код в приложении секундомера, но у меня проблема с циклом, все значения в моем массиве одинаковы. Я хочу поочередно наблюдать за массивами. Наблюдайте, добавляйте в массив и делайте новое наблюдение и продолжайте движение до размера выборки t. Как я должен использовать цикл, очень полезно.Использование циклов в iOS

- (IBAction)onLapPressed:(id)sender { 

    timeData = [[NSMutableArray alloc] init]; 

    for (NSInteger k = 0; k < t; ++k) 
    { 
    [timeData addObject:[NSNull null]]; 
    } 

    NSDate *currentDate = [NSDate date]; 
    NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate]; 
    NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval]; 

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"ss.S"]; 
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]]; 
    NSString *timeString=[dateFormatter stringFromDate:timerDate]; 

    CGFloat timeStringFloat = (CGFloat) [timeString floatValue]; 
    [timeData replaceObjectAtIndex:i withObject:timeString];  
    lap1.text = [timeData objectAtIndex:i]; 
    NSString *iyaz = [NSString stringWithFormat: @"%d",i+1]; 
    NSString *tyaz = [NSString stringWithFormat: @"%d",t]; 
    NSString *baseString = [NSString stringWithFormat: @"%@/%@",iyaz,tyaz]; 

    lap2.text = baseString; 

    totaltime = totaltime + timeStringFloat; 

    x2 = x2 + powf(timeStringFloat, 2); 
    n = round((40* sqrtf(t*x2 - powf(totaltime, 2))/totaltime)); 

    avgtime = totaltime/(i+1); 

    NSString *strtotaltime =  [NSString stringWithFormat:@"%f", avgtime]; 
    NSString *toobserve = [NSString stringWithFormat:@"%d", n]; 
    avglap.text = strtotaltime; 
    obsno.text = toobserve; 
    startDate = [[NSDate date]retain]; 
    i=i+1; 

} 
+1

повторно пост http://stackoverflow.com/questions/15076294/mutable-array-values-are-exactly-same – vikingosegundo

+0

где же 'T' пришел? – holex

ответ

0

Попытайтесь использовать это. Не перекрывайте свои значения с помощью этого цикла при каждом запуске. Кроме того, немного проще использовать текущий размер массива вместо того, чтобы идти в ногу со значением «i». Затем создайте массив, получая новые значения.

- (IBAction)onLapPressed:(id)sender { 
    if(!timeData) timeData = [[NSMutableArray alloc] init]; 

    NSDate *currentDate = [NSDate date]; 
    NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate]; 
    NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval]; 

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"ss.S"]; 
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]]; 
    NSString *timeString=[dateFormatter stringFromDate:timerDate]; 

    CGFloat timeStringFloat = (CGFloat) [timeString floatValue]; 
    [timeData addObject:timeString]; 
    lap1.text = timeString; 
    NSString *iyaz = [NSString stringWithFormat: @"%d",[timeData count]+1]; 
    NSString *tyaz = [NSString stringWithFormat: @"%d",t]; 
    NSString *baseString = [NSString stringWithFormat: @"%@/%@",iyaz,tyaz]; 

    lap2.text = baseString; 

    totaltime = totaltime + timeStringFloat; 

    x2 = x2 + powf(timeStringFloat, 2); 
    n = round((40* sqrtf(t*x2 - powf(totaltime, 2))/totaltime)); 

    avgtime = totaltime/([timeData count]+1); 

    NSString *strtotaltime =  [NSString stringWithFormat:@"%f", avgtime]; 
    NSString *toobserve = [NSString stringWithFormat:@"%d", n]; 
    avglap.text = strtotaltime; 
    obsno.text = toobserve; 
    startDate = [[NSDate date]retain]; 
} 
Смежные вопросы