【问题标题】:Can I to know if ipad was rebooted?我可以知道ipad是否重新启动?
【发布时间】:2013-09-13 08:38:55
【问题描述】:

我正在开发一个必须在线和离线工作的应用程序。此应用程序应与我们的服务器同步信息。为此,我们需要设备利用服务器时钟。 查了很多资料,得到以下思路:

  1. 当用户在线登录时,我将强制他获取服务器时钟时间。此时他必须有互联网连接,所以没关系。
  2. 当我获得时钟服务器时间时,我会获得 systemUptime 信息,该信息表示设备开启的时间间隔,并将其存储起来。我可以像这样获得 systemUptime:

    [NSProcessInfo processInfo].systemUptime
    
  3. 当用户新建本地文件时,我会根据systemUptime函数知道当前时间间隔,所以我知道当前时间,我不依赖iOS系统时钟。

问题是:每次重新启动或关闭设备时,systemUptime 都会重置。直到这里OK,我可以解决它强制用户再次登录,并再次获取服务器时钟时间。我的问题是知道设备何时重新启动。你能帮助我吗?谢谢各位!

【问题讨论】:

  • 你能澄清你的目标吗?您真的对系统正常运行时间感兴趣,还是只想确保您的应用使用与服务器时钟同步的时间?
  • 我的目标是让创建的文件有正确的时间,因为在我的例子中,用户经常把 iOS 时钟放在过去,试图跳出我们的互联网块。我需要文件的时间最接近服务器时间,因为如果我需要控制文件何时同步和下载,我希望我能回答你的问题。

标签: iphone ios objective-c ipad clock


【解决方案1】:

我的建议是根本不要提及设备时间。从服务器获取文件并让服务器也回答检索文件的服务器时间。您可以将其存储在文件中、文件名中或单独存储在设备上。

在将来的某个时间询问服务器是否有比您之前记录的服务器时间更新的文件。

从这个意义上说,时间根本不是真正的时间,它是一个版本号,您也可以在服务器上明确说明这一点,只使用服务器中的一个整数来指示版本的进展顺序。

如果您的应用以这种方式强大很重要,那么您唯一的选择就是保持独立于设备时间。否则,它可能会破坏的方式太多(包括由于时间检查延迟或设备出厂重置或用户的恶意行为导致的小时间错误)。如果可以的话,最好保持独立于设备时间。

【讨论】:

  • 我的大问题是:我必须使用 iPad。首先,我在第一台 iPad 上登录了我的帐户。所以我创建了一个平局,例如,同步它,然后离线。现在我打开这个文件并继续画一些东西。第一台 iPad 仍处于离线状态。现在我在第二台 iPad 上使用相同的帐户登录。我会下载抽奖,在第二台 iPad 也离线后。同样的方式我继续画这个。如果我有正确的时间,我知道哪一个将是最新的同步。但我现在知道这会很困难,现在我正在考虑改变我们的同步策略。谢谢大佬
  • 你会允许两个ipad同时编辑吗?然后,即使有完美的时间同步,编辑也可能发生冲突。因此,您将不得不开发合并逻辑(例如,处理一个 ipad 编辑另一个 ipad 删除的对象的情况)。另一种方法是让一台 ipad “锁定”文件,而另一台进行编辑。然后你仍然可以用一个简单的整数来跟踪版本。
  • 谢谢你,dahn,我会在这里与我的团队保持一致,然后我会和你谈谈发生了什么。感谢您的帮助。
【解决方案2】:

当您第一次获得 systemUptime 时,从当前 (iOS) 日期和时间中减去它。这是系统上次启动的时间。

然后在必要时重新计算该值。如果“系统上次启动的时间”发生了变化,那么您就知道是时候重新登录了。

但是,正如另一位评论者所建议的那样,我怀疑有更好的方法可以从头开始解决这个问题。

【讨论】:

  • 我的问题是我永远无法信任设备时钟。这样我就可以解决我今天遇到的同样的问题。谢谢。
猜你喜欢
  • 2012-05-09
  • 2022-09-23
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-27
相关资源
最近更新 更多