2013-08-02 19 views
3

我正在構建一個使用大量NSDate類的應用程序。但NSDate使用設備上的時間,所以如果用戶更改設備的小時數,應用程序將有一個假的時間/日期,應用程序將不會與服務器同步,用戶體驗將會是不好...在應用程序中本地存在當前服務器時間。

所以我需要以某種方式得到所有的日期相對於服務器,我可以要求時間到服務器每次我做[[NSDate alloc] init],因爲我使用了很多...所以我需要一種方式總是得到相對於服務器的日期...像[[MYDate alloc]初始化]並讓我的服務器在那裏...

到目前爲止我能想到的最佳解決方案是:當應用程序開始我問服務器它是當前unix時間,有了這個響應後,我在一個單身人士設置選擇器運行一次每秒更新這個你nix的時間,我改變每一個[[NSDate alloc]初始化]與我自己的Singleton類的調用,使我的服務器時間更新...我不知道如何處理應用程序進入背景時......我的時間將不會同步...

你們怎麼看待這個?

謝謝!

回答

3

這可以很容易地通過使用NSDate子類來完成。

例如

@interface MyDate : NSDate{ 

} 

@end 

@implementation MyDate 

- (id) init{ 
    if(![super initWithTimeIntervalSince1970:[ServerSingleton time]]) 
    return nil; 
    return self; 
} 

@end 

這應該做你在問什麼。至於單身人士,你不需要每秒檢查一次,這對於iOS設備,網絡和你的服務器來說是很多工作。相反,您只需在應用程序的一開始就檢查一次服務器。然後,有你單是這個樣子:

- (void)checkTime{ 
    self.timeOffset = serverTime - deviceTime; 
} 

- (time_t)time{ 
    return deviceTime - self.timeOffset; 
} 

這應該只需要檢查一次,以獲得在設備和服務器之間的時間電流差。然後,您只需從當前設備時間中減去時間偏移量即可獲取服務器上的當前時間。

+0

但是,如果用戶同時更改他的設備時間呢? – TheTiger

相關問題