Ich konnte erfolgreich meine Wetter App arbeiten; Anzeigen der aktuellen Testdaten und so weiter. Aber das einzige Problem ist jetzt, dass ich die App nur dazu bringen kann, die Daten zu holen, indem ich meinen "Refresh" -Button drücke, den ich gemacht habe. Wie kann ich meine App aktualisieren, wenn sie geöffnet wird?Auto Update UI wenn App geöffnet ist
Hier ist mein Arbeitscode:
import Foundation
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var tempLabel: UILabel!
@IBOutlet weak var humidLabel: UILabel!
@IBOutlet weak var refresh: UIButton!
@IBOutlet weak var negitiveSymbol: UILabel!
func getTemp(){
var urlString = "http://torsher.ca/Weather/temperature.txt"
var url = NSURL(string: urlString)
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)
dispatch_async(dispatch_get_main_queue()) {
self.tempLabel.text = (tempContent)
}
}
task.resume()
}
func getHumid(){
var urlString = "http://torsher.ca/Weather/humidity.txt"
var url = NSURL(string: urlString)
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 humidContent:String = urlContent as String
println(humidContent)
dispatch_async(dispatch_get_main_queue()) {
self.humidLabel.text = (humidContent)
}
}
task.resume()
}
@IBAction func refreshPressed(sender: AnyObject, forEvent event: UIEvent) {
getTemp()
}
@IBAction func refreshPress(sender: AnyObject, forEvent event: UIEvent) {
getHumid()
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
Was bei sagt, ich war auf der Suche die AppDelegate.swift Datei und ihre eingebauten func „Func applicationDidEnterBackground (Anwendung: UIApplication)“ zu verwenden, aber alles, was ich entweder versuchen, bricht die App oder funktioniert einfach nicht. Ich möchte, dass die App die getTemp-Funktion, die getHumid-Funktion ausführt und dann die Benutzeroberfläche mit den Werten aktualisiert, die ich in den IBAction-Funktionen über die Schaltflächen eingegeben habe.
Jede Hilfe wird sehr geschätzt.
EDIT:
//
// ViewController.swift
// WeatherStation
//
// Created by on 2015-04-16.
// Copyright (c) 2015 . All rights reserved.
//
import Foundation
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var tempLabel: UILabel!
@IBOutlet weak var humidLabel: UILabel!
@IBOutlet weak var refresh: UIButton!
@IBOutlet weak var negitiveSymbol: UILabel!
@IBOutlet weak var dateUpdate: UILabel!
func getTemp() //Gets the temeprature from the server and displays it.
{
var urlString = "http://torsher.ca/Weather/temperature.txt"
var url = NSURL(string: urlString)
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)
dispatch_async(dispatch_get_main_queue()) {
self.tempLabel.text = (tempContent)
}
}
task.resume()
}
func getHumid() //Gets the humidity from the server and displays it.
{
var urlString = "http://torsher.ca/Weather/humidity.txt"
var url = NSURL(string: urlString)
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 humidContent:String = urlContent as String
println(humidContent)
dispatch_async(dispatch_get_main_queue()) {
self.humidLabel.text = (humidContent)
}
}
task.resume()
}
@IBAction func refreshPressed(sender: AnyObject, forEvent event: UIEvent) //Updates UI with current temperature when refresh is pressed.
{
getTemp()
}
@IBAction func refreshPress(sender: AnyObject, forEvent event: UIEvent) //Updates UI with current humidity when refresh is pressed.
{
getHumid()
}
func appWasOpened(notification: NSNotification!)
{
getHumid()
getTemp()
}
deinit {
NSNotificationCenter.defaultCenter().removeObserver(foregroundNotification)
}
override func viewDidLoad()
{
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector:
"appWasOpened:", name: UIApplicationWillEnterForegroundNotification, object:
nil)
}
}
Versuchte die zweite Lösung das Hinzufügen, war nicht in der Lage mit deinit laufen().
Keine dieser Lösungen scheint zu funktionieren. Ich bin nicht sicher, warum, sie kompilieren, aber die App nicht die Daten ziehen noch zeigt es an. Irgendwelche anderen Ideen? – MicrosoftDave
sie funktionieren sicher .. es muss etwas anderes schief gehen. Sie sollten versuchen, eine 'println ('einige Protokollinformationen') 'entweder auf den Block in der ersten Lösung oder die' appWasOpened'-Funktion in der zweiten Lösung zu setzen, um zu überprüfen, ob sie aufgerufen werden. Zusätzlich können Sie einen Aufruf von 'self.appWasOpened (nil)' an Ihre 'viewWillAppear'-Methode senden. –
Wo überschreibe ich Deinit? Ich probierte in AppDelegate und ViewController – MicrosoftDave