UITableView 最初不加载数据
UITableView Not Loading Data Initially
我的 UITableViewController
,最初查看时不包含任何数据。然而,有一次,我转到另一个 UIViewController
,当 segue 仍在动画时数据出现,然后数据就在那里。所以要真正看到数据,我需要转到另一个 ViewController,然后再回到 UITableViewController
。我正在使用 Parse.com 框架。下面的代码,是初始的ViewController
,它也是一个UITableViewController
,它对初始不包含任何数据的UITableViewController
进行segues。感谢帮助,我是IOS开发的新手,所以请在swift.
EDIT:Many的答案或评论中进行回答假设数据被检索,只是没有加载到 UITableViewController
。然而,问题是在 segue 完成时数据还没有被检索到。谢谢
override func prepareForSegue(segue: UIStoryboardSegue, sender:AnyObject?){
var cell = sender as UITableViewCell
var text = cell.textLabel!.text
currentScreen=text!
println(currentScreen)
groupConversation=[]
var messageDisplayOne = PFQuery(className:currentScreen)
messageDisplayOne.selectKeys(["userPost"])
messageDisplayOne.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]!, error: NSError!) -> Void in
if error == nil{
println("Type message \(groupConversation)")
for object in objects {
var textObject = object["userPost"] as String
groupConversation.append(textObject)
}
} else {
// Log details of the failure
}
}
}
正如 Rakeshbs 在评论中所说,这里发生的是您的查询正在后台线程上执行。这意味着您的视图在查询 returns 之前加载并执行其回调(加载数据)。
为了解决这个问题,我们可以在成功回调结束时使用 tableview.reloadData 来在我们处理完数据后重新加载 table。代码如下:
注意:请参阅 Rakeshbs 答案以获得更清晰的版本,这里唯一的区别是我解包了 UIStoryboardSegue,因为已知在某些情况下访问属性时解包会导致问题。
override func prepareForSegue(segue: UIStoryboardSegue!, sender:AnyObject?){
var cell = sender as UITableViewCell
var text = cell.textLabel!.text
currentScreen=text!
println(currentScreen)
groupConversation=[]
var messageDisplayOne = PFQuery(className:currentScreen)
messageDisplayOne.selectKeys(["userPost"])
messageDisplayOne.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]!, error: NSError!) -> Void in
if error == nil{
println("Type message \(groupConversation)")
for object in objects {
var textObject = object["userPost"] as String
groupConversation.append(textObject)
}
var destinationController = segue.destinationViewController as UITableViewController
destinationController.tableView.reloadData()
} else {
// Log details of the failure
}
}
}
您正在进入 UITableViewController 吗?
override func prepareForSegue(segue: UIStoryboardSegue!, sender:AnyObject?){
//Start Spinner
var cell = sender as UITableViewCell
var text = cell.textLabel!.text
currentScreen=text!
println(currentScreen)
groupConversation=[]
var messageDisplayOne = PFQuery(className:currentScreen)
messageDisplayOne.selectKeys(["userPost"])
messageDisplayOne.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]!, error: NSError!) -> Void in
//Stop Spinner
if error == nil{
println("Type message \(groupConversation)")
for object in objects {
var textObject = object["userPost"] as String
groupConversation.append(textObject)
}
var tableViewController = segue.destinationViewController as UITableViewController
tableViewController.tableView.reloadData()
} else {
// Log details of the failure
}
}
}
我的 UITableViewController
,最初查看时不包含任何数据。然而,有一次,我转到另一个 UIViewController
,当 segue 仍在动画时数据出现,然后数据就在那里。所以要真正看到数据,我需要转到另一个 ViewController,然后再回到 UITableViewController
。我正在使用 Parse.com 框架。下面的代码,是初始的ViewController
,它也是一个UITableViewController
,它对初始不包含任何数据的UITableViewController
进行segues。感谢帮助,我是IOS开发的新手,所以请在swift.
EDIT:Many的答案或评论中进行回答假设数据被检索,只是没有加载到 UITableViewController
。然而,问题是在 segue 完成时数据还没有被检索到。谢谢
override func prepareForSegue(segue: UIStoryboardSegue, sender:AnyObject?){
var cell = sender as UITableViewCell
var text = cell.textLabel!.text
currentScreen=text!
println(currentScreen)
groupConversation=[]
var messageDisplayOne = PFQuery(className:currentScreen)
messageDisplayOne.selectKeys(["userPost"])
messageDisplayOne.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]!, error: NSError!) -> Void in
if error == nil{
println("Type message \(groupConversation)")
for object in objects {
var textObject = object["userPost"] as String
groupConversation.append(textObject)
}
} else {
// Log details of the failure
}
}
}
正如 Rakeshbs 在评论中所说,这里发生的是您的查询正在后台线程上执行。这意味着您的视图在查询 returns 之前加载并执行其回调(加载数据)。
为了解决这个问题,我们可以在成功回调结束时使用 tableview.reloadData 来在我们处理完数据后重新加载 table。代码如下:
注意:请参阅 Rakeshbs 答案以获得更清晰的版本,这里唯一的区别是我解包了 UIStoryboardSegue,因为已知在某些情况下访问属性时解包会导致问题。
override func prepareForSegue(segue: UIStoryboardSegue!, sender:AnyObject?){
var cell = sender as UITableViewCell
var text = cell.textLabel!.text
currentScreen=text!
println(currentScreen)
groupConversation=[]
var messageDisplayOne = PFQuery(className:currentScreen)
messageDisplayOne.selectKeys(["userPost"])
messageDisplayOne.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]!, error: NSError!) -> Void in
if error == nil{
println("Type message \(groupConversation)")
for object in objects {
var textObject = object["userPost"] as String
groupConversation.append(textObject)
}
var destinationController = segue.destinationViewController as UITableViewController
destinationController.tableView.reloadData()
} else {
// Log details of the failure
}
}
}
您正在进入 UITableViewController 吗?
override func prepareForSegue(segue: UIStoryboardSegue!, sender:AnyObject?){
//Start Spinner
var cell = sender as UITableViewCell
var text = cell.textLabel!.text
currentScreen=text!
println(currentScreen)
groupConversation=[]
var messageDisplayOne = PFQuery(className:currentScreen)
messageDisplayOne.selectKeys(["userPost"])
messageDisplayOne.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]!, error: NSError!) -> Void in
//Stop Spinner
if error == nil{
println("Type message \(groupConversation)")
for object in objects {
var textObject = object["userPost"] as String
groupConversation.append(textObject)
}
var tableViewController = segue.destinationViewController as UITableViewController
tableViewController.tableView.reloadData()
} else {
// Log details of the failure
}
}
}