Swift - 表视图未填充数据但未显示错误
Posted
技术标签:
【中文标题】Swift - 表视图未填充数据但未显示错误【英文标题】:Swift - Table View not populating with data but shows no errors 【发布时间】:2016-07-01 17:49:47 【问题描述】:使用以下教程,我尝试显示一些将填充到表格中的股票信息。我已经创建了表格视图控制器以及表格视图单元格,并将 stockTableViewCell 与表格视图单元格链接。但是我无法将主故事板上的 tableview 与自定义 table view 控制器链接。
基本上每次我尝试将它输入到自定义类字段时它都不适用,当我离开时它消失
我的问题是,我的视图控制器或表格视图单元是否有问题,或者我的情节提要中有什么配置错误?
教程:https://developer.apple.com/library/ios/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson7.html
表格视图控制器
import UIKit
class stocksTableViewController: UITableViewController
// Mark: Properties
var stocks = [stockData]()
let stock = stockinfo()
override func viewDidLoad()
super.viewDidLoad()
loadSampleStockData()
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
func loadSampleStockData ()
var stock1: stockData = stockData(name: "", askPrice: "", percentageChange: "", stockTicker: "")
var stock2: stockData = stockData(name: "", askPrice: "", percentageChange: "", stockTicker: "")
var stock3: stockData = stockData(name: "", askPrice: "", percentageChange: "", stockTicker: "")
stock.getInfo("FB") (name, price, change) in dispatch_async(dispatch_get_main_queue(),
stock1 = stockData(name: name, askPrice: price, percentageChange: change, stockTicker: "FB"))
stock.getInfo("MSFT") (name, price, change) in dispatch_async(dispatch_get_main_queue(),
stock2 = stockData(name: name, askPrice: price, percentageChange: change, stockTicker: "MSFT"))
stock.getInfo("APPL") (name, price, change) in dispatch_async(dispatch_get_main_queue(),
stock3 = stockData(name: name, askPrice: price, percentageChange: change, stockTicker: "APPL"))
stocks += [stock1, stock2, stock3]
override func numberOfSectionsInTableView(tableView: UITableView) -> Int
return 1
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return stocks.count
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cellIdentifier = "stockViewCell"
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! stockTableViewCell
let stock = stocks[indexPath.row]
cell.stockName.text = stock.name
cell.stockPercentage.text = stock.percentageChange
cell.stockDollarChange.text = stock.askPrice
cell.stockTicker.text = stock.stockTicker
return cell
表格视图单元格
import Foundation
import UIKit
class stockTableViewCell: UITableViewCell
// Properties
@IBOutlet weak var stockTicker: UILabel!
@IBOutlet weak var stockPercentage: UILabel!
@IBOutlet weak var stockName: UILabel!
@IBOutlet weak var stockDollarChange: UILabel!
override func awakeFromNib()
super.awakeFromNib()
// Initialization Code
override func setSelected(selected: Bool, animated: Bool)
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
【问题讨论】:
你在哪里打电话给tableView.reloadData()
?
你指的是 loadSampleStockData(),我在 viewDidLoad() 函数中调用了它,还是你问的不是这个?
我指的是上面的代码
在那种情况下,我不相信我会这样做!感谢您了解这一点。
【参考方案1】:
您实际上需要在 viewDidLoad()
中注册您的 customtableviewcell您还可以查看以下链接
http://www.mysamplecode.com/2013/06/ios-custom-uitableviewcell-example.html
【讨论】:
谢谢!由于我对开发还很陌生,因此我阅读了您提供的链接,但是对于如何在视图控制器的 viewDidLoad() 中注册我的 customtableviewcell 仍然有点迷茫。非常感谢您的帮助! 我尝试使用这个:tableView.registerClass(stockTableViewCell, forCellReuseIdentifier: "stockViewCell") 来注册类,但我仍在试图弄清楚如何使用这个调用,因为我现在正在出现错误。 请查看链接显示的示例代码@MarkGong-Guy 如果一切都是在 Interface Builder 中设计的——就像 Apple 教程中建议的那样——你不需要注册任何东西。【参考方案2】:如果不查看您的项目,不确定您遇到了什么问题,但您想在自定义类中输入什么?您应该输入 stockTableViewController 并且它应该可以工作,除非您没有在情节提要上拖入 TableViewController。而且您无需在 viewDidLoad 中注册您的单元格,请忽略该评论。
这里使用这个更新的代码,你正在尝试将两种类型的视图控制器设置为故事板上的一个视图,将此代码放入你的类 dashboardViewController 中,这应该会让你走上正确的轨道,不要忘记连接当您实现它时,此代码上的 tableView 属性的出口。
class dashboardViewController: DefaultViewController, UITableViewDataSource, UITableViewDelegate
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var balanceLabel: UILabel!
var stocks = [stockData]()
let stock = stockinfo()
override func viewDidLoad()
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
loadSampleStockData()
user.newUser() // Move to login function when login and registration is implemented
//Sets the Balance Label on Dashboard
balanceLabel.text = "$" + String(format: "%.2f", user.getBalance())
func loadSampleStockData ()
var stock1: stockData = stockData(name: "", askPrice: "", percentageChange: "", stockTicker: "")
var stock2: stockData = stockData(name: "", askPrice: "", percentageChange: "", stockTicker: "")
var stock3: stockData = stockData(name: "", askPrice: "", percentageChange: "", stockTicker: "")
stock.getInfo("FB") (name, price, change) in dispatch_async(dispatch_get_main_queue(),
stock1 = stockData(name: name, askPrice: price, percentageChange: change, stockTicker: "FB"))
stock.getInfo("MSFT") (name, price, change) in dispatch_async(dispatch_get_main_queue(),
stock2 = stockData(name: name, askPrice: price, percentageChange: change, stockTicker: "MSFT"))
stock.getInfo("APPL") (name, price, change) in dispatch_async(dispatch_get_main_queue(),
stock3 = stockData(name: name, askPrice: price, percentageChange: change, stockTicker: "APPL"))
stocks += [stock1, stock2, stock3]
func numberOfSectionsInTableView(tableView: UITableView) -> Int
return 1
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return stocks.count
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cellIdentifier = "stockViewCell"
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! stockTableViewCell
let stock = stocks[indexPath.row]
cell.stockName.text = stock.name
cell.stockPercentage.text = stock.percentageChange
cell.stockDollarChange.text = stock.askPrice
cell.stockTicker.text = stock.stockTicker
return cell
`
【讨论】:
您要填充哪个 TableView?仪表板上的那个?文件夹? AddStock 还是排行榜?此外,所有这些视图都是 ViewController,因此您的 UITableViewController 不适合自定义类部分。 我正在尝试将其填充到仪表板中。哦,我明白了。我将如何解决它?非常感谢 zsteed,我是 iOS 开发的新手,所以我还在学习基础知识。附言。我使用视图和视图控制器的方式正确吗? 看起来很有效。但现在我收到此错误:无法将“NSNull”(0x1a1934bc0)类型的值转换为“NSString”(0x1a193f7e8)。有什么想法吗?再次@zsteed,我非常感谢你的帮助。 无需过多地进入您的网络,只需将您的代码更改为这个,它现在将是一个快速修复,但可能不会长期解决问题 let companyName: String = quote[ “名称”] 为?细绳 ?? "" let askPrice: String = quote["Ask"] as?细绳 ?? "" let percentChange: String = quote["ChangeinPercent"] as?细绳 ?? "",祝你好运 如果这些解决了您的问题,请用支票标记我的答案。【参考方案3】:我看到了你的项目,我有几点可以帮助你:
-
您的搜索字段没有出口。您插入了 UISearchDisplayController 但未与您的类 AddStockViewController 连接。
最重要的UISearchDisplayerController 已弃用,请尝试使用 UISearchController 或 UISearchBar。
o/
【讨论】:
非常感谢,我一定会做出这些改变。感谢您查看我的项目并给我反馈!以上是关于Swift - 表视图未填充数据但未显示错误的主要内容,如果未能解决你的问题,请参考以下文章
表视图数据未在 Alamofire 发布请求调用 swift 3 中显示