3

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

所以我需要以某种方式获取与服务器相关的所有日期,我每次执行时都可以向服务器请求时间,[[NSDate alloc] init]因为我使用了很多...所以我需要一种方法来始终获取相对于服务器......类似于 [[MYDate alloc] init] 并让我的服务器时间在那里......

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

大家对此怎么看??

谢谢!!

4

1 回答 1

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

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

于 2013-08-02T16:44:09.600 回答