从iPhone应用程序中了解设备中的日期和时间设置

时间:2013-05-03 13:23:01

标签: ios objective-c date datetime settings

我想知道用户是否已将其设备设置为在iPhone中的Settings.app中自动设置日期和时间。我需要这些信息,因为我想让用户只在一天内访问应用程序中的某些信息,他只能在第二天再次访问。但智能用户可以更改日期并访问信息。所以我想检查一下他们是否自动为设备设置日期/时间。

有没有办法这样做。如果存在,请建议任何其他替代方式。 提前谢谢。

2 个答案:

答案 0 :(得分:2)

我认为没有办法检测用户对自动更新日期时间设置的偏好。要确定给定点的时间长度,您可以选择几个绝对值或没有任何错误的选项。

  1. 使用NSDate,您可以通过手动更改设备上的日期来规避您已知道的。
  2. 使用时间服务器。通过查询时间服务器,您可以获得独立的日期时间值。存储该值并与其进行比较以确定是否已经过了适当的时间量。当然,缺点是需要互联网连接到功能属性。
  3. 使用系统时钟值或一系列值来粗略计算经过的时间。 CACurrentMediaTimemach_absolute_time()等函数可以提供与之比较的计数。您可以获取值并递增它们,直到达到指定的持续时间以重置第二天检查的标记。
  4. 单独的选项都不能提供理想的解决方案,但通过组合这些方法,您可以达到可接受的保证水平,即用户仅在允许的时间内访问信息。

答案 1 :(得分:1)

这是另一个建议,我对我正在开发的会议应用程序有类似的问题。我想在会议的第二天向用户显示一些数据。

与我们的团队讨论从设备获取日期选项之后。我们决定不使用这种方法,因为正如您所说,某些用户可能会更改日期设置,而且某些用户可能不情愿地将其设备设置到其他国家/地区的时间和日期区域,这些区域可能存在用户的日期冲突问题。

最后,我们决定创建一个简单的网页,并获取该信息的http 200http 404请求。您不必将数据或其他任何内容放入服务器,我们只是想从Web获取响应代码。

因此,假设您有一个网页http://xxxxxxxxxxxxxx.pdf.html我们不会将任何pdf文件放到服务器上,因此用户始终获取http 404 response我们会禁用或隐藏相关数据/按钮/排什么的。在会议的第二天,我们放置了一个虚拟页面,现在用户可以获得http 200 response,因此我们启用了按钮/行/数据。

如果您决定从here

使用此方法下载块来进行nsurlconnection

然后使用以下代码:

NSURL *theFileURL=[NSURL URLWithString:@"yoururl"];
 NSURLRequest *request = [NSURLRequest requestWithURL:theFileURL];

    [URLConnection asyncConnectionWithRequest:request
                              completionBlock:^(NSData *data, NSURLResponse *response) {
                                  //get data and response
                                  if ([response isKindOfClass:[NSHTTPURLResponse class]])
                                  {
                                      NSHTTPURLResponse * httpResponse = (NSHTTPURLResponse *) response;
                                      //NSString *fileMIMEType = [[httpResponse MIMEType] lowercaseString];
                                      NSLog(@"httpResponse.statusCode %i",httpResponse.statusCode);
                                      if (httpResponse.statusCode==200) {
                                          //correct respond show data

                                      }
                                      else if (httpResponse.statusCode==404)
                                      {
                                          //no file this
                                          NSLog(@"no file at the server");

                                      }

                                  }
                                  //[HUD removeFromSuperview];


                              } errorBlock:^(NSError *error) {
                                  //get error

                                  NSLog(@"error %@",error);
                              } uploadPorgressBlock:^(float progress) {
                                  //Upload progress (0..1)
                              } downloadProgressBlock:^(float progress) {
                                  //Download progress (0.1)
                                  //progress += 0.01;
                                  //HUD.progress = progress;
                              }];