我有一个tableView
在View Controller
与delegate
和datasource
通过IB连线。我正在使用tableView
进行多项选择。在我didSelectRowAt IndexPath
,选择让用户标记两个核心数据实体之间的关系:当用户加载视图中的第一时间,选择行没有任何影响tableView didSelectRowAt indexPath在第一次加载视图时没有触发,第二次很好用
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
let wageClassObject = self.wageClasses[indexPath.row]
let wageClassStatus = wageClassObject.value(forKey: "checked") as? Bool
wageClassObject.setValue(!wageClassStatus!, forKey:"checked")
if (wageClassStatus)! {
proposalToEdit?.addToWageClasses(wageClassObject)
}
else {
proposalToEdit?.removeFromWageClasses(wageClassObject)
}
}
。当用户第二次加载视图时,添加和删除功能很好。
我试过this thread中提出的每个解决方案,但没有骰子。我无法找到与我的情况非常相似的情况,但问题在于第一次加载视图时不起作用。
建议非常感谢!
编辑补充:我不使用viewDidAppear
viewDidLoad
和核心数据的代码
override func viewDidLoad() {
loadProposalData()
tableView.reloadData()
super.viewDidLoad()
proposalNameField.delegate = self
pensionField.delegate = self
percentField.delegate = self
if let topItem = self.navigationController?.navigationBar.topItem {
topItem.backBarButtonItem = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.plain, target: nil, action: nil)
}
if wageClasses != nil {
getWageClasses()
print("\(wageClasses)")
}
}
func getWageClasses(){
let fetchRequest: NSFetchRequest<WageClass> = WageClass.fetchRequest()
do {
try self.wageClasses = context.fetch(fetchRequest)
} catch {
// handle error
}
}
@IBAction func calculateButtonTapped(_ sender: UIButton) {
var proposal: Proposal!
if proposalToEdit == nil {
proposal = Proposal(context: context)
} else {
proposal = proposalToEdit
}
proposal.dateCreated = currentDateTime as NSDate?
if let proposalName = proposalNameField.text {
proposal.proposalName = proposalName
}
if let pensionContribution = pensionField.text {
proposal.pensionContribution = (pensionContribution as NSString).doubleValue
}
if let percentIncrease = percentField.text {
proposal.percentIncrease = (percentIncrease as NSString).doubleValue
}
/// if let setting the checked value?
adD.saveContext()
_ = navigationController?.popViewController(animated: true)
}
。
更多关于核心数据。我有两个实体,建议和wageClass。两者都有彼此多对多的关系。在这个viewController上,用户可以通过三个文本框(名称,增加百分比,养老金额度)来编辑提案,然后从tableView中选择相关的工资类别。
我希望用户能够输入建议字段,并在首次单击上一个viewController的导航栏中的添加按钮时选择相关的wageClasses。发生的事情是,用户点击添加,将数据输入到文本字段,选择工资类别,然后点击计算。文本字段保存并且标签用程序计算更新,但wageClasses数据保持零。如果用户再次选择提案(这就是我上面第二次加载视图的意思),那么用户可以添加wageClasses并且所有计算都能正确运行。但不是在视图第二次打开之前。
你能看出你在'viewDidLoad'和'viewDidAppear'方法中究竟做了什么,你是什么意思是“第二次加载视图”?视图控制器通常在每个应用生命周期中加载其视图。有关在此ViewController中访问核心数据堆栈的更多代码?编辑为 –
以添加所需的信息。谢谢! – camelCaseUpInYourFace