我想将格式为“HH:mm:ss.SSS”的字符串中的值相加并再次显示。在我的例子中,它添加了不同的 timeString 以获得 currentString。我不确定这样做的正确方法。我肯定做错了。我面临的问题是,当我单击停止按钮并再次单击开始时,它再次从 0 开始。我希望它从它停止的同一位置开始。
部分代码在这里:
-(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;
}
完整代码在这里:
View Controller .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
我欢迎您提出的任何其他更正...
最佳答案
我建议不要将数学应用于字符串。
我的意思是:
“苹果”和“千年隼”这两个词的总和是多少?没有任何意义,是吗?
那么,当您有一个非常好的数字 (timeInterval
) 时,为什么要尝试形成两个字符串的加法 — 一种非常适合执行代数运算的类型?
附言:
NSDateFormatter
实例希望被重用。将你的存储在一个实例变量中。
关于iphone - 在 ios 中将字符串中的两个值加在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13173156/