ios - 在应用程序中本地获取当前服务器时间。

标签 ios objective-c cocoa-touch

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

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

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

你们怎么看这件事??

谢谢!!

最佳答案

这可以通过使用 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;
}

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

关于ios - 在应用程序中本地获取当前服务器时间。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18019332/

相关文章:

ios - UITableViewControllers 上的 prepareforSegue 方法

ios - 将 ObjC 代码转换为 iOS Swift

ios - 使用 Xcode storyboard 导致 Xcode 卡住,Interface Builder Cocoa Touch Tool 飙升至 %99

iphone - 将音乐文件下载到 iPhone

iphone - 我可以将 UITableView 分组背景图案用于 UIView 吗?

iphone - 使用 CATransform3D 将矩形图像转换为四边形

ios - MDM:安装配置文件后证书无效

ios - 如何将 ios 应用程序连接到树莓派(应用程序代码)?

ios - 如何检查众多特定的UITextField?

ios - 为 NSData iOS 中的每一位设置数据