如何在 UITableView 中安全地使用未初始化的数组并显示一个空表
Posted
技术标签:
【中文标题】如何在 UITableView 中安全地使用未初始化的数组并显示一个空表【英文标题】:How can I safely use an un-initialized array in a UITableView and show an empty table 【发布时间】:2016-09-20 12:17:02 【问题描述】:当数组为空并且您从 UITableView 或 UIPickerView 发出请求时,如何防止崩溃?
我当前的方法是在将数组与虚拟数据一起使用之前始终初始化我的数组,但我对这种方法并不满意,因为有时不需要虚拟数据,甚至更糟,有时甚至没有意义显示数据,其实大多数时候我想要的是在没有数据的情况下显示一个空表。
例如,如果我要从 NSUserDefaults
检索一个数组以在 UITableView
中使用,我通常会在 AppDelegate
中初始化它,如下所示...
AppDelegate.swift:
NSUserDefaults.standardUserDefaults().registerDefaults([
keyMyAarray:["Dummy Data"]// initializing array
])
SomeViewController:
var myArray = read content from NSUserDefaults...
func numberOfSectionsInTableView(tableView: UITableView) -> Int
return 1
fun tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return myArray.count
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
var cell = UITableViewCell()
cell.textLabel.text = myArray[indexPath.row]
return cell
同样,我怎样才能安全地在 UITableView
中使用未初始化的数组并显示一个空表?
【问题讨论】:
如果您的myArray
没有任何元素,那么它肯定会显示空表!
return myArray.count
in numberOfRowsInSection
确保了这一点。
这不会在某些时候使应用程序崩溃吗?我已经看到由于使用未初始化的数组而导致的错误/崩溃。
@NSNoob,我明白了,谢谢。
@fs_tigre 我虽然你想在视图中保留空行... :)
【参考方案1】:
无需将“虚拟数据”放入您的数组中。您可以只初始化一个空数组。如下所示
var myArray = [String]()
在numberOfRowsInSection
返回 myArray.count。如果 count 为零,cellForRowAtIndexPath
将不会被调用,您可以放心使用。
【讨论】:
【参考方案2】:默认为 3 个空行。
var myArray:Array<String>? = ...
func numberOfSectionsInTableView(tableView: UITableView) -> Int
return 1
fun tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return myArray?.count ?? 3
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
var cell = UITableViewCell()
if let arrayStrings = myArray, arrayStrings.count > indexPath.row
cell.textLabel.text = arrayStrings[indexPath.row]
return cell
【讨论】:
很高兴知道您可以添加空行。谢谢以上是关于如何在 UITableView 中安全地使用未初始化的数组并显示一个空表的主要内容,如果未能解决你的问题,请参考以下文章
如何初始化 UITableView?来自 XIB 和以编程方式?
具有动态数据初始化的 UiTableviewCell 未正确加载
如何初始加载 UITableView 然后观察 Firebase 节点以更改在 Swift 中刷新 tableview?