2017-03-23 28 views
1

之間的1分鐘我有一個UIProgressView,顯示兩個NSDate之間的時間。一切工作正常,每分鐘通過UIProgressView前進0.1分鐘。在我的應用程序中減去兩個NSDate

兩個日期之間的差額,在這樣一個CGFloat的

除此之外計算我有一個UIButton它應有的每個按鈕被按下時「降低ProgressView 0.1」中的幾句話功能我想花一分鐘來解釋我之前創建的兩個NSDate之間的區別。我做了一些嘗試,但我無法得到這個,因爲當我的應用程序關閉,然後重新打開兩個日期之間的時間差不會改變...我怎麼能做到這一點?

我告訴你我使用

-(void)viewDidLoad { 
    [super viewDidLoad]; 
    [self startDate]; 
} 

-(void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    [self upgradeEnergyBar]; 
    [NSTimer scheduledTimerWithTimeInterval: (1 * 60) 
            target:self 
            selector:@selector(upgradeEnergyBar) 
            userInfo:nil 
            repeats:YES]; 
} 

-(void)startDate { 
    NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; 
    if (! [defaults boolForKey:@"notFirstRun"]) { 
     NSDate *date = [NSDate new]; 
     [[NSUserDefaults standardUserDefaults] setObject:date forKey:@"open"]; 
     NSLog(@"Ora di apertura : %@", date); 
     [defaults setBool:YES forKey:@"notFirstRun"]; 
    } 
} 

- (IBAction)sfAction:(id)sender { 
    //Decrement CGFLOAT 
} 

-(void)upgradeEnergyBar { 
    self.now = [NSDate new]; 
    NSDate *lastDate = [[NSUserDefaults standardUserDefaults] objectForKey:@"open"]; 
    NSTimeInterval timeInterval = [self.now timeIntervalSinceDate:lastDate]; 
    _minutes = timeInterval/60; 

    _energyBar.progress = _minutes * 0.1; 
    [self updateLabelEnergyWithProgress:_energyBar.progress]; 
    _minute.text = [NSString stringWithFormat:@"MINUTES:%ld", (long) _minutes]; 


    NSLog(@"MINUTES:%ld", (long) _minutes); 

    if (_energyBar.progress == 1) NSLog(@"end"); 
} 

回答

1

代碼,您似乎在有幾個問題,但回答你「如何減去一分鐘」 ......

你什麼真的想要做的是ADD一分鐘到您保存的日期。因此,在sfAction:你可以:

- (IBAction)sfAction:(id)sender { 

    // get the 'saved' date/time 
    NSDate *lastDate = [[NSUserDefaults standardUserDefaults] objectForKey:@"open"]; 

    // add one minute (60 seconds) 
    lastDate = [lastDate dateByAddingTimeInterval:60]; 

    // get the current date/time 
    NSDate *now = [NSDate date]; 

    // use the earlier date/time (to avoid a date/time in the future) 
    NSDate *earlier = [lastDate earlierDate:now]; 

    // save it back to User Defaults 
    [[NSUserDefaults standardUserDefaults] setObject:earlier forKey:@"open"]; 

} 

編輯:現在這包括代碼,以確保我們不會增加所保存的日期/時間晚於當前日期/時間。

邊注...

這真的不是不斷的讀/寫用戶默認值是個好主意。

你應該讀取當你的應用程序啓動時(或者也可以當它返回到前臺)並將值保存在變量/屬性中。

當您的應用退出(或正在發送到後臺)時,您可以編寫更新後的值。

+0

完美的作品...現在我cpaito我的錯誤...問題是我不再保存我的皮膚新的NSUserDefault ..我想問一個問題...代碼工作正常,當我打開和關閉我的現在的應用程序分鐘更改...但爲什麼從XCode啓動我的應用程序不能通過ipad關閉分鐘不會更改? – kAiN

+0

你..爲負值我用這種方式修正if(bar.progress == 0)return; 你能告訴我是否和避免負值的方法? – kAiN

+0

我編輯了我的答案,以顯示避免負面/未來時間問題的一種方法。我真的不知道你的其他問題是什麼... – DonMag