在应用程序中本地服务器时间。

时间:2013-08-02 14:24:24

标签: ios objective-c cocoa-touch

我正在构建一个使用大量NSDate类的应用程序。但NSDate使用来自设备的时间,因此如果用户更改其设备中的小时,则应用程序将具有假的时间/日期,并且应用程序将不会与服务器同步并且用户体验将是坏...

所以我需要以某种方式获取相对于服务器的所有日期,每次我做[[NSDate alloc] init]时我都可以请求服务器的时间,因为我正在使用那个很多...所以我需要一个总是得到相对于服务器的日期的方式...像[[MYDate alloc] init]和我的服务器时间......

到目前为止,我能想到的最佳解决方案是:当应用程序启动时,我向服务器询问它是当前的unix时间,在得到响应之后,我在单例内设置一个每秒运行一次的选择器更新此unix时间并且我每次都更改使用我自己的Singleton类调用[[NSDate alloc] init]来保持我的服务器时间更新...我不确定如何处理的是当应用程序进入后台时...我的时间不会被同步...

你们对此有什么看法?

谢谢!

1 个答案:

答案 0 :(得分:3)

这可以通过使用NSDate子类轻松完成。

e.g。

@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;
}

这应该只需要检查一次,以获得设备和服务器之间的当前时间差。然后,您只需从当前设备时间中减去时间偏移量,即可获得服务器上的当前时间。