【问题标题】:How to load counter form current text in Objective C如何在Objective C中加载计数器形式的当前文本
【发布时间】:2017-03-15 08:39:40
【问题描述】:

我是 iOS 新手,我在加载计数器时遇到问题。 我的代码是这样的

viewDidLoad()
{
    if (!_currentTimeInSeconds) {

           }_currentTimeInSeconds = 0 ;
     if (!_myTimer) {
            _myTimer = [self createTimer];
        }
}
- (NSTimer *)createTimer {
    return [NSTimer scheduledTimerWithTimeInterval:1.0
                                            target:self
                                          selector:@selector(timerTicked:)
                                          userInfo:nil
                                           repeats:YES];
}



- (NSString *)formattedTime:(int)totalSeconds
{
    int seconds = totalSeconds % 60;
    int minutes = (totalSeconds / 60) % 60;
    int hours = totalSeconds / 3600;

    return [NSString stringWithFormat:@"%02d:%02d:%02d",hours, minutes, seconds];
}
- (void)timerTicked:(NSTimer *)timer {

    _currentTimeInSeconds++;

    clockLabel.text = [self formattedTime:_currentTimeInSeconds];

}
-(void)updateTime
{
    NSDate *date= [NSDate date];
    NSDateFormatter *formatter1 = [[NSDateFormatter alloc]init]; //for hour and minute

    formatter1.dateFormat = @"hh:mm:ss";// use any format

    clockLabel.text = [formatter1 stringFromDate:date];
}

保存

 NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
 Timmer=clockLabel.text;
 [defaults setValue:Timmer forKey:@"Timmer"];
 [defaults synchronize];

用于检索

 NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
Timmer=[defaults objectForKey:@"Timmer"];
clockLabel.text=Timmer;

此代码从 0 开始设置值。 我需要从我离开计数的地方设置值。如何做到这一点? 提前致谢!

【问题讨论】:

  • NSUserDefaults!?
  • 用户 Nsuserdefault 或全局存储值并检索它'
  • @HimanshuMoradiya 是的,我已经尝试过了,但是计数器从 0 开始重新启动。
  • @luk2302 是的,我已经尝试过了,但计数器从 0 重新启动
  • 您显示的代码并未证明您使用NSUserDefaults的努力。

标签: ios objective-c nstimer


【解决方案1】:

如果您想在退出并重新启动应用程序后检索计数,那么您应该将值保存/存储到NSUserDefaults

【讨论】:

  • 是的,我尝试使用 NSUserDefaults 但计数器从 o 重新启动。
  • 那么你使用的保存和检索机制是错误的。如果您可以在此处发布您的代码,将会很有帮助。
  • 您需要使用set​Object:​for​Key:​ 而不是setValue:forKeydeveloper.apple.com/reference/foundation/nsuserdefaults/…
  • 好的。但它从 0 开始计数。
【解决方案2】:

离开控制器时只需在 NSUserDefaults 中设置值。整个代码经过测试,它的工作完全正常。请参阅上面的评论视频。

var _currentTimeInSeconds : Int = Int()
var _myTimer : Timer = Timer()

override func viewDidLoad() {
        super.viewDidLoad()
        _currentTimeInSeconds = 0 ;
        _myTimer = self.createTimer()
 }

func createTimer()-> Timer {
        return Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(timerTicked), userInfo: nil, repeats: true)
}
func timerTicked(_ timer: Timer) {
    _currentTimeInSeconds += 1;
    label.text = self.formattedTime(self._currentTimeInSeconds)

}
func formattedTime(_ totalSeconds: Int) -> String {
    let seconds: Int = totalSeconds % 60
    let minutes: Int = (totalSeconds / 60) % 60
    let hours: Int = totalSeconds / 3600
    return String(format: "%02d:%02d:%02d", hours, minutes, seconds)
}
func updateTime() {
        let date = Date()
        let formatter1 = DateFormatter()
        //for hour and minute
        formatter1.dateFormat = "hh:mm:ss"
        // use any format
        label.text = formatter1.string(from: date)
}
override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(true)
        print(_currentTimeInSeconds)
        let defaults = UserDefaults.standard
        defaults.setValue(_currentTimeInSeconds, forKey: "Timmer")
        defaults.synchronize()
}
override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        let defaults = UserDefaults.standard
        if  (defaults.object(forKey: "Timmer") != nil){
            _currentTimeInSeconds = defaults.object(forKey: "Timmer") as! Int
            print(_currentTimeInSeconds)
        }
 }

快乐编码。

【讨论】:

  • 但是我需要从计数器值开始计数器。如果计数器是 0.0.07 那么它将是 0.0.8 等等。
  • @Muju 我在 viewwillappear() 中评论了一些内容阅读它并暗示这段代码我已经在我的代码中使用了它所以
  • 不从0开始计数。
  • @Muju _currentTimeInSeconds 在 userdefault 中设置此值并检索它并在 viewwillappear() 中设置它的值,不要忘记启动计时器方法
【解决方案3】:
- (void)viewDidLoad {

    timeSec=[[NSString stringWithFormat:@"%ld",(long)[[NSUserDefaults standardUserDefaults]integerForKey:@"timeSec"]] intValue];
    timeMin=[[NSString stringWithFormat:@"%ld",(long)[[NSUserDefaults standardUserDefaults]integerForKey:@"timeMin"]] intValue];
    [self StartTimer];
}
-(void) StartTimer
{
    timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerTick:) userInfo:nil repeats:YES];
    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
    self.lbl_timer.text=@"00:00";

}
- (void)timerTick:(NSTimer *)timer
{
    timeSec++;
    if (timeSec == 60)
    {

        timeSec = 0;
        timeMin++;
    }
    self.lbl_timer.text= [NSString stringWithFormat:@"%02d:%02d", timeMin, timeSec];;
}

当您回到屏幕时添加此代码。如返回按钮或关闭按钮操作

[timer invalidate];
[[NSUserDefaults standardUserDefaults]setInteger:timeSec forKey:@"timeSec"];
[[NSUserDefaults standardUserDefaults]setInteger:timeMin forKey:@"timeMin"];

【讨论】:

  • 你的代码是用来创建定时器的。我需要从我离开的地方开始定时器。
  • @Muju 这段代码是正确的,因为当你第一次打开应用程序时比开始到 0 比回到屏幕后比从最后一个计时器值开始
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-20
  • 1970-01-01
  • 2011-03-31
相关资源
最近更新 更多