2012-11-01 14 views
0

我想将这些字符串中的值加在一起,格式为:“HH:mm:ss.SSS”并再次显示。在我的情况下,它将添加timeString与差异来获取currentString。我不确定正确的做法。我肯定是做错了。我面对的问题是,当我点击停止按钮,然后再次点击开始,它再次从0开始..我希望它从它离开的同一地点开始。在ios中将字符串中的两个值相加

部分代码是在这里:

-(void)updateTimer{ 
    currentDate = [NSDate date]; 
    NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate]; 
    NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval]; 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"HH:mm:ss.SSS"]; 
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]]; 
    timeString=[dateFormatter stringFromDate:timerDate]; 
    currentString=[dateFormatter stringFromDate:timerDate]; 
    //double doubleOfString = [timeString doubleValue] + [difference doubleValue]; 
    //currentString = [NSString stringWithFormat:@"%f",doubleOfString]; 
    lbl.text = currentString; 
} 

整个代码是在这里:

Viewcontroller.h

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>{ 
    UILabel *lbl; 
    NSTimer *stopTimer; 
    NSDate *startDate,*currentDate; 
    BOOL running,lap; 
    UIButton *bttn; 
    NSMutableArray *tableItems; 
    NSString *timeString,*currentString,*difference; 
    UITableView *tableview; 
} 

@property (strong,nonatomic) IBOutlet UILabel *lbl; 
@property (strong,nonatomic) IBOutlet UIButton *bttn; 
@property (strong,nonatomic) NSMutableArray *tableItems; 
@property (strong,nonatomic) NSString *timeString; 
@property (strong,nonatomic) IBOutlet UITableView *tableview; 

-(IBAction)startPressed:(id)sender; 
-(IBAction)resetPressed:(id)sender; 

-(void)updateTimer; 

@end 

ViewController.m

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 
@synthesize lbl,bttn,tableItems,timeString,tableview; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    lbl.text = @"00.00.00.000"; 
    running = FALSE; 
    lap = FALSE; 
    difference = @"0"; 
    startDate = [NSDate date]; 
    tableItems = [[NSMutableArray alloc] init]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 
-(IBAction)startPressed:(id)sender{ 
    if(!running){ 
     running = TRUE; 
     lap = TRUE; 
     [sender setTitle:@"Stop" forState:UIControlStateNormal]; 
     [bttn setTitle:@"Lap" forState:UIControlStateNormal]; 
     if (stopTimer == nil) { 
      stopTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/10.0 
                 target:self 
                 selector:@selector(updateTimer) 
                 userInfo:nil 
                 repeats:YES]; 
     } 
    }else{ 
     running = FALSE; 
     lap = FALSE; 
     startDate = currentDate; 
     difference = currentString; 
     [sender setTitle:@"Start" forState:UIControlStateNormal]; 
     [bttn setTitle:@"Restart" forState:UIControlStateNormal]; 
     [stopTimer invalidate]; 
     stopTimer = nil; 
    } 

} 
-(void)updateTimer{ 
    currentDate = [NSDate date]; 
    NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate]; 
    NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval]; 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"HH:mm:ss.SSS"]; 
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]]; 
    timeString=[dateFormatter stringFromDate:timerDate]; 
    currentString=[dateFormatter stringFromDate:timerDate]; 
    double doubleOfString = [timeString doubleValue] + [difference doubleValue]; 
    //currentString = [NSString stringWithFormat:@"%f",doubleOfString]; 
    lbl.text = currentString; 
} 

-(IBAction)resetPressed:(id)sender{ 
    if (!lap) { 
     [stopTimer invalidate]; 
     stopTimer = nil; 
     tableItems = [[NSMutableArray alloc] init]; 
     startDate = [NSDate date]; 
     lbl.text = @"00.00.00.000"; 
     running = FALSE; 
    } 
    else{ 
     [tableItems insertObject:timeString atIndex:0]; 
     [tableview reloadData]; 
    } 

} 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
    return tableItems.count; 
} 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 

    //Step 1:Check whether if we can reuse a cell 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; 

    //Step2: If there are no new cells to reuse,create a new one 
    if(cell == nil) 
    { 
     cell = [[UITableViewCell alloc] initWithStyle:(UITableViewCellStyleDefault) reuseIdentifier:@"cell"]; 
     //UIView *v = [[UIView alloc] init]; 
     //v.backgroundColor = [UIColor redColor]; 
     //cell.selectedBackgroundView = v; 
     //changing the radius of the corners 
     //cell.layer.cornerRadius = 10; 

    } 

    //Step 3: Set the cell text content 
    cell.textLabel.text = [tableItems objectAtIndex:indexPath.row]; 

    //Step 4: Return the row 
    return cell; 

} 



@end 

我欢迎任何其他的改正,你可以建议...

+0

究竟你想要什么? –

+0

需要添加timeString差异... – lakesh

+0

我面临的问题是,当我点击停止按钮,然后再次点击开始,它从0开始再次..我想它从它离开的同一个地方开始off .. – lakesh

回答

1

我好心建议不要将数学字符串

我的意思是:
单词“apple”和“Millenium Falcon”的总和是多少?没有任何意义,是吗?

那么,为什么你努力形成另外两个字符串的,当你有一个非常好的号码(timeInterval) - 一种非常适合于执行代数运算?

PS:
NSDateFormatter实例希望被重用。将你的实例变量存储起来。

1

你更新计时器功能是:首先,在.h文件中添加int counter。在viewDidLoad中counter = 0;

-(void)updateTimer{ 

    counter ++; 
    int hours = counter/3600 ; 
    int minutes = (counter/60) - (hours * 60); 
    int seconds = counter - (hours * 3600) - (minutes * 60); 

    lbl.text = [NSString stringWithFormat:@"%02d:%02d:%02d", hours, minutes, seconds]; 
} 
+0

你的sharedInstance从哪里来?顺便说一句,我的代码实际上是正确的..只是需要将差异加在一起... – lakesh

+0

检查编辑答案... –

+0

感谢您的其他解决方案,但它并没有帮助解决我目前的问题.. – lakesh

相关问题