【问题标题】:Update text with data from a remote .txt file使用远程 .txt 文件中的数据更新文本
【发布时间】:2015-06-21 22:19:15
【问题描述】:

我正在创建一个供个人使用的小应用程序,用于显示我的 Arduino 气象站的温度和湿度。我的气象站将温度和湿度上传到我的网络服务器并保存到 .txt 文件中。我希望我的应用程序从服务器中提取该数据并显示在文本区域中。

以下是有关数据如何存储在服务器上的一些有用信息: 湿度和温度存储在两个不同的 .txt 文件中。 温度档案 - Temperature 对于湿度,请将 URL 中的温度替换为湿度

用于上传数据的 PHP 文件 -

$fileContent = $var1. "%\n";

$fileStatus = file_put_contents('humidity.txt',$fileContent);

if($fileStatus != false)
{
echo "Success: Values written to server";
}

else
{
echo "Fail: Values were written to server";
}
?>

湿度 PHP 文件除了名称和文件 URL 外相同。

最后是我的 ViewController 代码:

import UIKit

class ViewController: UIViewController {
@IBOutlet weak var tempLabel: UILabel!
@IBOutlet weak var humidLabel: UILabel!
@IBOutlet weak var refreshButton: UIButton!

@IBAction func buttonPressed(sender: AnyObject) {

    var urlString = "http://torsher.ca/Weather/temperature.txt"

    var url = NSURL(string: urlString)

    let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in

        var urlContent = (NSString(data: data, encoding: NSUTF8StringEncoding))

        var contentArray = urlContent!.componentsSeparatedByString("<span class=\"phrase\">")

        var newContentArray = contentArray[1].componentsSeparatedByString("</span>")

        var tempContent = newContentArray[0] as String

        println(tempContent)

        dispatch_async(dispatch_get_main_queue()) {
        self.tempLabel.text = tempContent
        }

    }

    task.resume()
    }


override func viewDidLoad() {
    super.viewDidLoad()

    }
}

我希望能够在应用打开时强制刷新和刷新。我的 Arduino 每 15 分钟推送一次新数据。但是为了创建,我使用每次阅读的 URL 手动更新 .txt 文件。如果需要测试,请随时更新读数。

在 URL 中的 '=' 符号后面加上您想要的值。 Temperature.php 对于湿度,将温度和温度替换为湿度和湿度。

谢谢!

【问题讨论】:

  • 旁注:为什么会有% 登录"%\n";
  • @Fred-ii- 我假设是因为他想将湿度写为 [number]%。
  • @DigitalChris 之后我有点想。我编辑了我的评论并删除了“它不应该在那里”。不过你的立场是正确的。

标签: php swift


【解决方案1】:

如果你改变了

let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in

let task = NSURLSession.sharedSession().dataTaskWithRequest(NSURLRequest(URL: url!, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 15.0)){(data, response, error) in

您可以设置NSURLRequestCachePolicyReloadIgnoringLocalAndRemoteCacheData 应该(如其所述)忽略所有缓存并仅请求页面而不查看任何缓存。

这也会在请求中包含超时

您的应用还将在其appDelegate 中包含此函数,您可以在此处调用一个重新加载数据的函数,这将在您打开(或从多任务屏幕)应用时执行

func applicationDidEnterBackground(application: UIApplication) {
    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}

编辑:

游乐场:

import Foundation
import UIKit
import XCPlayground


var urlString = "http://torsher.ca/Weather/temperature.txt"
var url = NSURL(string: urlString)

func getData(){
    let task = NSURLSession.sharedSession().dataTaskWithRequest(NSURLRequest(URL: url!, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 15.0)){(data, response, error) in
        var urlContent = (NSString(data: data, encoding: NSUTF8StringEncoding))
        var tempContent:String = urlContent as! String    
        println(tempContent)
    }

    task.resume()
} 

getData()

XCPSetExecutionShouldContinueIndefinitely()

【讨论】:

  • 好的。我现在可以看到控制台显示来自服务器 (20) 的值,但现在它说我的数组超出范围。这个数组如上。 (urlContent!.componentsSeparatedByString(""))
  • 好的。我现在可以看到控制台显示来自服务器 (20) 的值,但现在它说我的数组超出范围。这个数组如上。 (urlContent!.componentsSeparatedByString("")
  • 我已经编辑了答案并放入了我用来回答您问题的 Playground 文件。我使用 swift 1.2 和最新的 xCode Beta,所以如果你使用相同的版本,这也应该适用于你
  • 很抱歉打扰您,但您似乎知道自己在说什么。我也能够让代码在操场上工作,但是当我在常规代码中尝试它时,它就不起作用了。不同之处在于“XCPSetExecutionShouldContinueIndefinitely()”行,没有它,值不会打印在控制台中。有什么想法让它在 ViewController 中工作,而不仅仅是在操场上工作?
  • 要在视图控制器中使用,您应该删除 import XCPlayground 和 XCSet.....(),这些只是为了确保 Playground 支持异步请求,您应该可以随意粘贴其余部分
猜你喜欢
  • 2014-02-21
  • 1970-01-01
  • 2016-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-04
  • 2010-11-06
  • 1970-01-01
相关资源
最近更新 更多