- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
背景资料
我正在开发一个连接到服务器的 iOS 应用程序,并且可以从设备向服务器发出请求,以将本地数据库与服务器的数据库同步。任何一个数据库都可能发生更改。该应用程序还具有离线功能,用户可以在不连接到互联网连接的情况下修改数据,并且只有在线才能通过发送新数据和接收来自服务器的更新来将设备的本地数据库与服务器的数据库同步。
更新了更多背景信息:处理的数据是必须在一定时间内完成的表格。它的启动时间作为一个属性存储在模型上,并且使用该属性,应用程序向用户显示在该表单被锁定之前还剩多少时间。
问题
当设备处于离线状态时,用户可以操纵时间设置,这会使从该设备接收到的数据不准确。
我已经搜索了一种方法来检测设备时间设置的更改,但根据 this SO answer ,除非我的应用程序在后台运行,否则这似乎是不可能的,Apple 对此非常严格,除非应用程序具有 background modes 之一,否则不允许这样做启用,这在应用程序中不适用。
更新了更多信息:正如我在上面背景信息的更新部分中提到的,数据是可能有时间限制的表格。因此,用户可以在一台设备上启动表单,但不能在那里完成。然后他们会将数据同步到服务器,跳转到另一台设备并填写相同的表格。
建议的解决方案
我最接近解决这个问题的方法是在安装应用程序时获取服务器时间和设备时间之间的差异(确保在第一次打开应用程序时在线以便为此设备配置它),并在我想存储与时间相关的值时使用此差异作为引用。
如果服务器检测到时间差异,它将拒绝来自该设备的所有数据,这将强制设备恢复数据,更新时间差,然后才会接受来自该设备的数据。
问题在于,当设备离线时,用户可以更改时间设置,对数据进行更改,然后将时间设置恢复为上网前的状态。然后,服务器将检测到时间设置没有变化,并将接受无效数据。
更新以添加另一个建议的解决方案:为了详细说明我在以下问题中的注释以及@Krypton 的评论,由于与上述解决方案相同的问题,设备的正常运行时间对我的情况没有多大帮助。
获取设备的正常运行时间并将其与服务器时间进行比较是完美的,直到用户重新启动设备。用户无法手动更改它,但是只需重新启动一次即可破坏所有内容,这对我来说会产生相同的不准确数据。修复它需要计算新的差异,这在设备离线时无济于事。
问题
最佳答案
有三种方法可以获取设备上的时间。
NSDate
.用户可以修改的时间。 mach_absolute_time
.这是设备的绝对时间。但正如您所指出的,这会破坏设备重启时的一切。此外,当设备暂停时,这将变得不正确。 uptime
得到这个。 NSDate
的组合。和
uptime
.也许您可以在对表单进行的任何更改上保存两者的时间戳。您将能够计算这些更改值之间的任何差异,并为您的应用程序进行必要的计算。如果可能,您可能还想保存并与服务器时间进行比较。
NSDate
之间的差异。和开机时间。幸运的是,这是可能的。见
this answer或任何其他可能的方法的答案。请注意,执行此操作可能会导致小的(1-10 秒)不准确。
NSSystemClockDidChangeNotification
应该能够提供帮助。
uptime
来做到这一点。和
NSDate
作为模型中的时间戳。如果设备尚未重置,请使用
uptime
.计算
NSDate
启动(
see here),然后再次开始测量。如果这些差异发生显着变化,您就知道时间已被篡改。请记住,即使用户不更改时间(测量错误、夏令时......),这些差异也会改变。您考虑的内容很大程度上取决于您的应用程序。
uptime
)或者可能完全放弃更改。
关于ios - 离线时准确的时间检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34627791/
当然,您可以将剩余文件大小除以当前下载速度,但如果您的下载速度波动(而且它会波动),这不会产生很好的结果。有什么更好的算法可以产生更平滑的倒计时? 最佳答案 安exponential moving a
对于一个业余项目,我正在尝试对齐照片并创建 3D 图片。我基本上在一个钻机上有 2 个相机,我用来拍照。我会自动尝试以您获得 3D SBS 图像的方式对齐图像。 它们是高分辨率图像,这意味着需要处理大
当然,您可以将剩余的文件大小除以当前的下载速度,但如果您的下载速度波动(而且会波动),这不会产生很好的结果。什么是产生更平滑倒计时的更好算法? 最佳答案 安exponential moving ave
我有一个数据集,其中包含患有糖尿病和未患有糖尿病的人。我想使用这些数据训练一个模型来计算糖尿病状况未知的人的风险概率。我知道在培训中没有被诊断出糖尿病的人大多数都没有糖尿病,但很可能其中一些人可能患有
let parent = path[row-1] let child = path[row] let indexOfChild = matrix[parent.obje
我正在编写一些使用 Element.getBoundingClientRect 的代码(gBCR),加上内联样式更新,以执行计算。 这不适用于一般网站,我不关心或不感兴趣是否有“更好的 CSS 方式”
我有一个很大的 csv 文件,其中包含大量脏数据,我想通过消除所有不是绝对必要的值来稍微清理一下它。 Here是我正在谈论的文件。 它有以下组件: 网站,标题,开始日期,开始日期,雇主,地点,纬度,
有谁知道一个库,它为 Java 提供了一个错误不高于 1-2 毫秒的 Thread.sleep()? 我尝试了 sleep 、错误测量和 BusyWait 的混合,但在不同的 Windows 机器上我
UiApp有DateBox和 DateTimeFormat 对于那个类(class)。但是,不存在诸如 TimePicker 或 TimeBox 这样的东西,用户可以通过明确指定的方式(例如通过使用
因此,我使用 sklearn 的 svm.SVC 模块编写了一个程序来学习 mnist 数据集,出于某种原因,每当我计算其准确性为 100% 时。这似乎好得令人难以置信,这是预期的吗? from sk
我当前找到了 gpytorch ( https://github.com/cornellius-gp/gpytorch )。它似乎是将 GPR 集成到 pytorch 中的一个很棒的包。第一次测试也呈
我正在使用 QT Creator 5.9 创建一个简单的 Web 浏览器模型,我的 EditLine/Text Box 有问题: 1.如何在转到不同的网站/页面后自动更新显示的 URL 字符串。 2。
我在 Linux 上尝试 time -p 命令,我写了一些代码来浪费 CPU 周期: #include using namespace std; int main() { long int c;
亲爱的程序员/脚本编写者/工程师/其他人, 问题:我目前正在为 Android 3.2 平板电脑开发增强现实应用程序,但在获取准确的罗盘读数方面遇到一些问题。我需要确切地知道平板电脑所面向的 (z)
我最近一直在尝试了解 Apache Spark 作为 Scikit Learn 的替代品,但在我看来,即使在简单的情况下,Scikit 收敛到准确模型的速度也远远快于 Spark。例如,我使用以下脚本
如果不是,它的准确性如何? 我想在下载之前知道图片的大小。 最佳答案 HTTP Content-length header 是否格式错误?是的。 您是否应该相信它能公平地表示消息正文的大小?是的。 关
这是一个关于 ngram 线性回归的问题,使用 Tf-IDF(术语频率 - 逆文档频率)。为此,我使用 numpy 稀疏矩阵和 sklearn 进行线性回归。 使用一元语法时,我有 53 个案例和 6
对于某些给定的固定宽度,如何计算特定标签 (NSTextField) 中字符串的高度? 我用谷歌搜索了各种方法并尝试了 this method from Apple .它的工作原理,除了高度变成一行对
我是一名优秀的程序员,十分优秀!