Swift - UITableView'无法使用标识符Cell将单元格出列'

时间:2016-03-22 09:00:58

标签: ios json swift uitableview

我正在为Swift中的iOS项目工作。此应用程序涉及在UITableView中显示JSON数据。

我已经解析了JSON数据,但它没有显示在tableview上。当我运行我的应用程序时,它给了我这个错误:

  

由于未捕获的异常而终止应用   'NSInternalInconsistencyException',原因:'无法将单元格出列   带标识符Cell - 必须注册一个nib或类   标识符或连接故事板'

中的原型单元格

我正在尝试以编程方式执行所有操作,而不是使用故事板。 我将在下面添加我的代码。

import UIKit
import Foundation

class TableViewController: UITableViewController
{
    var postsCollection = [Post]()
    var service: PostService!

    override func awakeFromNib()
    {
        super.awakeFromNib()
    }

    override func viewDidLoad()
    {
        super.viewDidLoad()

        service = PostService()
        service.getPosts
        {
            (response) in 
            self.loadPosts(response["Events"]! as! NSArray)
        }
    }  

    func loadPosts(events: NSArray)
    {
        for event in events
        {
            //var event = event["Events"]! as! NSDictionary
            print("\n-----------------------------------------------------")
            print("           RECEIVED_JSON_DATA")
            print("-----------------------------------------------------")
            print("Title              :   \(event["Title"])")
            print("Event Description  :   \(event["EventDescription"])")
            print("Event Location     :   \(event["EventLocation"])")
            print("Event StartTime    :   \(event["EventStartTime"])")
            print("Event EndTime      :   \(event["EventEndTime"])")
            print("RowKey             :   \(event["RowKey"])")
            print("-----------------------------------------------------\n")

            var title = event["Title"]! as! String
            var description = event["EventDescription"]! as! String
            var location = event["EventLocation"]! as! String
            var startTime = event["EventStartTime"]! as! String
            var endTime = event["EventEndTime"]! as! String
            //var eventURL = event["EventURL"]! as! String
            var rowKey = event["RowKey"]! as! String

            //var postObj = Post(title: title, description: description, location: location, startTime: startTime, endTime: endTime, eventURL: eventURL, rowKey: rowKey)
            var postObj = Post(title: title, description: description, location: location, startTime: startTime, endTime: endTime, rowKey: rowKey)

            postsCollection.append(postObj)
        }

        dispatch_async(dispatch_get_main_queue())
        {
            self.tableView.reloadData()
        }
    }

    override func didReceiveMemoryWarning()
    {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    // TableView
    override func numberOfSectionsInTableView(tableView: UITableView) -> Int
    {
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        return postsCollection.count
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    {
        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell
        let object = postsCollection[indexPath.row]

        cell.textLabel!.text = object.title

        return cell
    }

    override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool 
    {
        // Return false if you do not want the specified item to be editable.
        return true
    }
}

任何人都可以帮我一把,告诉我哪里出错了吗?

谢谢!

3 个答案:

答案 0 :(得分:10)

确保在某处(可能在TableViewController的{​​{1}}中)注册了单元格类:

斯威夫特4:

viewDidLoad

Swift 3及以下:

self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")

答案 1 :(得分:0)

请使用:

self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell") 

在viewDidLoad func中告诉我们结果。

答案 2 :(得分:0)

在Swift 4中使用register代替registerClass

self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")