मैं सफलतापूर्वक अपना मौसम ऐप काम करने में सक्षम हूं; वर्तमान परीक्षण डेटा और आगे प्रदर्शित करना। लेकिन अब एकमात्र मुद्दा यह है कि मैं केवल ऐप को अपने "ताज़ा करें" बटन दबाकर डेटा लाने के लिए प्राप्त कर सकता हूं। जब मैं खोला जाता हूं तो मैं अपना ऐप यूआई अपडेट कैसे कर सकता हूं? लेकिन सब कुछ मैं या तो कोशिश:ऐप खोले जाने पर ऑटो अपडेट यूआई
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()
}
}
क्या मैं देख रहा था AppDelegate.swift फ़ाइल और इसकी समारोह में बनाया "applicationDidEnterBackground समारोह (UIApplication आवेदन)" का उपयोग करने का कहना है:
यहाँ मेरे कार्य कोड है ऐप तोड़ता है या सिर्फ काम नहीं करता है। मैं ऐप को getTemp फ़ंक्शन चलाता हूं, ह्यूमिड फ़ंक्शन प्राप्त करता हूं और उसके बाद UI से अद्यतन करता हूं जैसे मैंने बटन से IBAction फ़ंक्शंस में किया था।
किसी भी मदद की बहुत सराहना की जाती है।
संपादित करें:
//
// 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)
}
}
दूसरा समाधान जोड़ने का प्रयास किया गया, deinit साथ चलाने के लिए सक्षम नहीं था()।
इनमें से कोई भी समाधान काम नहीं करता है। मुझे यकीन नहीं है कि क्यों, वे संकलित करते हैं लेकिन ऐप डेटा खींच नहीं पाता है और न ही इसे प्रदर्शित करता है। कोई अन्य विचार? – MicrosoftDave
वे निश्चित रूप से काम करते हैं .. कुछ और गलत होना चाहिए। आपको पहले समाधान में ब्लॉक के लिए 'println (' कुछ लॉग informtaion ') डालने का प्रयास करना चाहिए या दूसरे समाधान में 'appWasOpened' फ़ंक्शन को जांचने का प्रयास करना चाहिए ताकि उन्हें कॉल किया जा सके या नहीं। इसके अतिरिक्त आप अपने 'viewWillAppear' विधि' के लिए 'self.appWasOpened (nil)' पर कॉल नहीं कर सकते हैं। –
मैं डेनिट को ओवरराइड कहां से करूं? मैंने AppDelegate में देखा और ViewController – MicrosoftDave