2016-12-06 82 views
-1

因此,我的应用从我不控制的服务器中提取JSON,并解析该JSON以填充UITableView自动刷新JSON

我想更新我的UITableView以实时反映服务器上的最新信息。所以无论何时在服务器上发生变化,我的UITableView也会得到更新。

现在想到的一个解决方案是持续发送GET请求让我们说一分钟后,解析JSON并重新载入表上的数据。

但是,这个问题必须有其他解决方案。我试图寻找,但迄今没有成功。

现在我明白这个问题是有点主观的由stackoverflow的标准,但真的我需要帮助有关此事,我还没有丝毫的线索,从哪里开始。所以任何帮助将不胜感激。

+2

最简单的方法是使用计时器。如果实时性很重要,请使用[socket](https://github.com/socketio/socket.io-client-swift)而不是http连接。 – Ryan

+0

你可以参考我的答案解决方案:http://stackoverflow.com/a/41002245/3077339 –

+0

但我不想使用计时器和服务器不在我的控制,所以我不能发送推送通知 –

回答

3

重复的GET通常是不被接受的,因为当大部分时间都没有发生时,它会要求客户端和服务器资源。

既然你不控制的服务器,我建议建立你控制,可以进行轮询,然后在检测到变化发送推送服务器。与客户投票相比,这有两个优势:它的规模更好,因为世界上只有一个投票来源,而且它保存了客户端的能量以及纯粹的推送方法。

Apple provides a push system (APNS)其中您的服务器将消息发送到您的iOS设备(通过Apple)。该设备将在后台启动您的应用,并调用:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo; 

对您的应用程序委托。

+0

准确地说,我不想重复GET,问题是我没有自己的服务器,所以我不能真正发送消息从服务器 –

+0

错过了。请参阅编辑。 – danh

+0

这可能是最佳解决方案。只需在你的应用程序中做一个故障转移选项:如果用户不批准推送通知,那么你可能想要在每个应用程序(你可能想这样做),然后每15'左右 - 如果这是有道理的......取决于人们如何使用你的应用程序:他们启动它,然后盯着它两个小时?大多数情况下,在每个'applicationDidBecomeActive:'和可选的“下拉刷新”刷新(因为你使用的是UITableView这将是一个10-liner ......)已经绰绰有余了...... –

0

正如上面的答案所述,它更好地使用APNS。 但是,如果你真的不控制服务器,那么就像你描述的那样,除了轮询之外你什么也做不了。由于您正在为iOS编写代码,因此建议您考虑以下几点:

  • Wifi约束:您是否获取了微小的有效载荷,以至于无论您使用的是WiFi吗?否则你应该配置可达性而不是对用户蜂窝服务的拖拽。
  • 后台会话&后台执行:考虑使用NSBackgroundUrlSession请求此数据。后台会话对操作系统来说效率更高一些,因为它们允许操作系统以机会方式执行请求。如果您需要为后台会话自定义NSURLSessionTasks,请考虑后台执行权利。
  • 可伸缩性:您的后端能否处理来自您的用户量的连续请求?
  • 更好的解决方案可能利用APNS,或插座/的WebSockets/Socket.io /火力/等
0

普通静音通知是当你添加服务器上的任何新项目此

最佳解决方案那时您可以向设备发送推送通知(无提示推送通知),以通知您在服务器端添加了某些内容。

当设备收到这样的推送通知时,您必须调用API并重新加载您的表视图。所以你不必每10秒重新加载tableview。

它“不会出现在通知栏通知警报,但它只会通知您的应用程序,有一些新的数据可用的,当你想推新内容

显示在通知中心:没有

清醒的应用程序来执行的后台任务:是

只需添加下面paylod从服务器端的推送通知 { “内容可用”:1 }

{ 
"content-available" : 1 
}