我有一个包含x个部分的tableView,每个部分都有一行。在每一行中都有UIElements接受输入。输入来自核心数据。我之前已将输入附加到数组中,然后索引到数组中,但我想在cellForRowAtIndexPath中直接/单独设置它们。由于CD提取需要一些时间才能完成,我需要"暂停" cellForRowAtIndexPath(直到coreData fetch发送了一个已完成的NSNotification。) 如何在提取完成时暂停并仅设置UILabels等。我需要为每个部分执行此操作。
非常感谢任何帮助!谢谢。
我担心代码会混淆,所以请随意忽略它。
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell
let dashboardCell = CellList.sharedInstance.dashboardCell[userIndexForItem[indexPath.section]] as DasboardCell
dashBoardCellGlobalVariablesInstance.value = dashboardCell.cdFetchObject.queryCDValue()
<--PAUSE AND WAIT FOR NSNOTIFICATION
let value = cell.contentView.viewWithTag(5) as UILabel
value.text = dashBoardCellGlobalVariablesInstance.value
<-- More UI ELEMENTS -->
return cell
}
答案 0 :(得分:2)
您需要重新构建您的方法。在每个单元格中填入您拥有的数据,是的,但不想要在等待通知时阻止用户界面。
当您收到完成通知时,将有问题的数据存储到您的dataSource中,然后适当地重新加载tableView数据(正确的答案,如何,何地,何时依赖于应用程序)。
来自UITableView类参考(https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableView_Class/):
重新加载表格视图
答案 1 :(得分:0)
我建议你这样设计你的课程
Class YourClass
{
var valueArr = [String]()
var cdValueObjectArr = [ValueObject]()
let totalSession = 7
@IBOutlet var tableView: UITableView!
func viewDidAppear()
{
let priority = DISPATCH_QUEUE_PRIORITY_HIGH
dispatch_async(dispatch_get_global_queue(priority, 0)) {
for i in 0...totalSession
{
String cdValue = cdFetchObjectArr[i].queryCDValue()
valueArr.appendElement(cdValue)
dispatch_async(dispatch_get_main_queue()) {
tableView.reloadData()
}
}
}
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell
let dashboardCell = CellList.sharedInstance.dashboardCell[userIndexForItem[indexPath.section]] as DasboardCell
if valueArr.size() > indexPath.session
{
let value = cell.contentView.viewWithTag(5) as UILabel
value.text = value[indexPath.session]
}
return cell
}
}