2014-10-13 15 views
7

Tôi đang viết lại một trong các ứng dụng của mình trong Swift, hiển thị dữ liệu thời tiết trực tiếp cho South Kohala. Love Swift cho đến nay!"Sử dụng số nhận dạng chưa được giải quyết" với Swift

Tôi đang gặp một vấn đề nhỏ đang nắm giữ mọi thứ. Tôi có một ứng dụng dựa trên thanh tab, chỉ dành cho iPad.

Một trong các tab của tôi là UIViewController được thêm TableView vào bảng phân cảnh để hiển thị dự báo NOAA. Tôi có một lớp dữ liệu Data truy xuất danh sách từ máy chủ của chúng tôi và tạo một hằng số List trong viewDidLoad. Nó là một mảng của mảng với bốn chuỗi trong mỗi subarray.

Tôi đã xác minh rằng nó ở đó, vì tôi có thể tạo một hằng số: List[0]println tất cả các chuỗi.

Tuy nhiên, khi tôi sử dụng nó để điền vào chế độ xem bảng, tôi nhận được lỗi "Sử dụng số nhận dạng chưa được giải quyết". Nếu thay vào đó, tôi thử đặt ô Title thành "Test" để hoạt động OK.

Điều này có vẻ như vấn đề phạm vi, nhưng khi hằng số được tạo trong lớp, tôi chỉ không hiểu tại sao nó không hiển thị trong hàm tableView. Tôi đã xem hàng chục bài viết về điều này, nhưng không có gì tôi đã tìm thấy dường như giúp đỡ. Đây là mã:

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 
    } 

Trả lời

11

Đó là vì List hoàn toàn là địa phương để các bên trong viewDidLoad; nơi bạn đã tuyên bố là nó, các phương pháp khác không thể nhìn thấy nó.

Tương phản, ví dụ: forecastsTable, được khai báo bên ngoài bất kỳ phương pháp nào, có nghĩa là bất kỳ phương pháp nào cũng có thể xem.

Hành vi này được gọi là "phạm vi" và rất quan trọng đối với bất kỳ ngôn ngữ lập trình nào. Biến số được khai báo bên trong một phương thức không hiển thị bên ngoài hoặc cũng không tồn tại khi phương thức đó đã chạy xong. Như vậy, trong ví dụ của bạn, không chỉ là List không nhìn thấy khi cellForRowAtIndex chạy, nó thậm chí không tồn tại khi cellForRowAtIndex chạy - nó đã bị phá hủy từ lâu trước đó.

+2

Nhân tiện, đừng bắt đầu tên biến ('Danh sách') bằng chữ cái viết hoa. – matt

+0

Cảm ơn, Matt. Tôi nghĩ rằng một biến được khai báo trong viewDidLoad có sẵn cho các hàm khác. – Snorkeler

+0

Và bây giờ bạn biết rằng đó là sai. Một biến toàn cục có thể nhìn thấy _set_ trong một hàm trước đó có giá trị đó được hiển thị cho một hàm sau, nhưng một biến cục bộ không nhìn thấy được trên toàn cầu - theo định nghĩa. – matt

Các vấn đề liên quan