在Swift中实现关键消息记录器Post请求

时间:2018-01-28 08:52:15

标签: php ios swift

我正在尝试实现一种方法,以便在MySQL数据库中记录关键消息。

在应用程序生成这些消息之后,应用程序继续尝试发送消息直到它成功到达数据库,这一点至关重要。 (用户可能处于脱机状态或可能发生其他意外情况)

但是,数据库不应该两次收到相同的消息。

日志记录非常重要,因为用户可能会在脱机时生成这些错误消息,或者可能无法成功访问数据库。

我尝试使用NSUserDefaults尝试这样做,假设我可以将每个请求存储在持久数组中,并在成功发送后删除元素。

我的第一个设计就是:

private static let defaults = UserDefaults.standard
private static let backupQueue = "Messages"
public  static func log(message: String) {

    var messageArray:[String] = [String]()

    if (defaults.value(forKey: backupQueue) as? [String] == nil) {
        defaults.set(messageArray, forKey: backupQueue)
    }
    messageArray = defaults.value(forKey: backupQueue) as! [String]

    messageArray.append(message)

    for i in (0..<messageArray.count).reversed() {
        let result = sendOff(message: messageArray[i])
        if (result) {
            messageArray.remove(at: i)
        }
    }

    defaults.set(messageArray, forKey: backupQueue)

}
private static func sendOff(message: String) -> Bool {
    return //Return true if it was sent and false if it was not
}

它与一个巨大的疏忽完美配合。应用程序的任何类型的Web请求都应该异步处理,所以很明显我们不能立即生成真值或假值。

此外,我甚至无法弄清楚如何格式化POST请求。例如,我知道如果我转到我的网络浏览器并将http://coolSite.org/Debug.php?message="We have a problem"作为地址,它将成功将消息发布到我的数据库。但是,当我尝试使用像this这样的技术从网站请求html时,它不起作用。在发送请求后约40秒,我不会收到任何错误消息。

因此我有两个问题:

  1. 我应该如何处理从中删除元素 如果我不能保证什么,NSUserDefaults一旦被发送 订单我会收到确认收据,因为它是 异步。
  2. 我无法让Swift像在网络浏览器中那样正确地访问网址。

0 个答案:

没有答案