2014-10-13 6 views
7

के साथ "अनसुलझा पहचानकर्ता का उपयोग" मैं स्विफ्ट में अपने एक ऐप्स को फिर से लिख रहा हूं, जो दक्षिण कोहला के लिए लाइव मौसम डेटा प्रदर्शित करता है। अब तक प्यार स्विफ्ट!स्विफ्ट

मुझे एक छोटी सी समस्या है जो चीजों को पकड़ रहा है। मेरे पास एक टैब बार आधारित ऐप है, केवल आईपैड।

मेरे टैब में से एक UIViewControllerTableView के साथ एनओएए पूर्वानुमान प्रदर्शित करने के लिए स्टोरीबोर्ड में जोड़ा गया है। मेरे पास डेटा क्लास Data है जो हमारे सर्वर से सूची पुनर्प्राप्त करता है और viewDidLoad में स्थिर List बनाता है। यह प्रत्येक subarray में चार तारों के साथ सरणी की एक सरणी है।

मैंने सत्यापित किया है कि यह वहां है, क्योंकि मैं स्थिर बना सकता हूं: List[0] और println सभी तार।

हालांकि, जब मैं तालिका दृश्य को पॉप्युलेट करने के लिए इसका उपयोग करने के लिए जाता हूं, तो मुझे "अनसुलझा पहचानकर्ता का उपयोग" त्रुटि मिलती है। यदि इसके बजाय, मैं सेल शीर्षक को "टेस्ट" पर सेट करने का प्रयास करता हूं जो ठीक काम करता है।

यह एक दायरे के मुद्दे की तरह लगता है, लेकिन जैसा कि कक्षा के भीतर निरंतर बनाया गया है, मुझे समझ में नहीं आता कि यह tableView फ़ंक्शन में क्यों दिखाई नहीं दे रहा है। मैंने इस पर दर्जनों पदों को देखा है, लेकिन मुझे जो कुछ भी मिला है वह मदद नहीं करता है। यहाँ कोड है:

import UIKit 

class ForecastsViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

    @IBOutlet weak var forecastsTable: UITableView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     let instanceofData: Data = Data() 
     let list = instanceofData.forecastsList() as NSArray 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as UITableViewCell 
     var forecastList:NSArray = list[indexPath.row] //selects one of the arrays from List 
     cell.textLabel?.text = forecastList[0] as string 
      return cell 
    } 

उत्तर

11

यह इसलिए क्योंकि List विशुद्ध रूप से viewDidLoad के अंदर करने के लिए स्थानीय है, जहां आपने को घोषित किया है, अन्य विधियां इसे नहीं देख सकती हैं।

कंट्रास्ट, उदाहरण के लिए, forecastsTable, जिसे के बाहर घोषित किया गया है, जिसका अर्थ यह है कि कोई भी विधि इसे देख सकती है।

इस व्यवहार को "स्कोप" कहा जाता है और यह किसी भी प्रोग्रामिंग भाषा के लिए महत्वपूर्ण है। वेरिएबल्स घोषित किसी विधि के अंदर न तो इसके बाहर दिखाई दे रहा है और न ही जब वह विधि समाप्त हो जाती है तो वे तब भी बने रहते हैं। इस प्रकार, अपने उदाहरण में, न केवल List नहीं दिख रहा है जब cellForRowAtIndex रन, तो यह और भी मौजूद नहीं है जब cellForRowAtIndex रन - यह लंबे समय से पहले नष्ट कर दिया गया।

+2

वैसे, पूंजी पत्र के साथ एक चर ('सूची') का नाम शुरू न करें। – matt

+0

धन्यवाद, मैट। मैंने सोचा कि viewDidLoad में घोषित एक चर अन्य कार्यों के लिए उपलब्ध था। – Snorkeler

+0

और अब आप जानते हैं कि यह गलत था। पहले के फ़ंक्शन में एक वैश्विक रूप से दृश्यमान चर _set_ में वह मान होता है जो बाद के फ़ंक्शन के लिए दृश्यमान होता है, लेकिन एक स्थानीय चर वैश्विक स्तर पर दिखाई नहीं देता है - परिभाषा के अनुसार। – matt