我有一個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