swift - 数据未连接到 tableView
问题描述
我正在构建一个应用程序,它具有三个 tableViews:一个用于俱乐部,另一个用于会员,这会导致交易。前两个 tableView 加上它们的“add”控制器正在工作,而第三个没有。据我所知,添加控制器工作,因为我知道事务被保存到核心数据。但是事务没有显示在 tableView 中,我不知道如何解决这个问题,因为这是我的第一个应用程序。
交易VC代码
import UIKit
import MessageUI
import CoreData
class TransactionViewController: UIViewController, MFMailComposeViewControllerDelegate, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableViewTransaction: UITableView!
let dateFromatter = DateFormatter()
var member: Member?
override func viewDidLoad() {
super.viewDidLoad()
dateFromatter.timeStyle = .long
dateFromatter.dateStyle = .long
}
override func viewWillAppear(_ animated: Bool) {
self.tableViewTransaction.reloadData()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func addNewTransaction(_ sender: Any) {
performSegue(withIdentifier: "newTransaction", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
guard let destination = segue.destination as? AddTransactionViewController else {
return
}
destination.member = member
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return member?.transactions?.count ?? 0
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableViewTransaction.dequeueReusableCell(withIdentifier: "transactionCell", for: indexPath)
if let transaction = member?.transactions?[indexPath.row] {
cell.textLabel?.text = transaction.reason
if let date = transaction.date {
cell.detailTextLabel?.text = dateFromatter.string(from: date)
}
}
return cell
}
@IBAction func sendEmail(_ sender: Any) {
let mailComposeVC = configureMailController()
if MFMailComposeViewController.canSendMail() {
self.present(mailComposeVC, animated: true, completion: nil)
} else {
showMailError()
}
}
func configureMailController() -> MFMailComposeViewController {
let mailComposerVC = MFMailComposeViewController()
mailComposerVC.mailComposeDelegate = self
mailComposerVC.setSubject("MAHNUNG")
mailComposerVC.setMessageBody("Hey, ich habe gesehen, dass dein Kontostand in der Buchhaltung zu tief ist. Ich bitte dich daher schnellst möglich mir das Geld zu bringen. Gruss", isHTML: false)
return mailComposerVC
}
func showMailError() {
let senMailErrorAlert = UIAlertController(title: "Could not send email", message: "Dein Gerät konnte die Email nicht senden.", preferredStyle: .alert)
let dismiss = UIAlertAction(title: "Ok", style: .default, handler: nil)
senMailErrorAlert.addAction(dismiss)
self.present(senMailErrorAlert, animated: true, completion: nil)
}
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
controller.dismiss(animated: true, completion: nil)
}
}
addTransaction 代码:
import UIKit
class AddTransactionViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var reasonTextField: UITextField!
@IBOutlet weak var amountTextField: UITextField!
@IBOutlet weak var datePicker: UIDatePicker!
var member: Member?
override func viewDidLoad() {
super.viewDidLoad()
reasonTextField.delegate = self
amountTextField.delegate = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
reasonTextField.resignFirstResponder()
amountTextField.resignFirstResponder()
}
@IBAction func saveTransaction(_ sender: Any) {
let reason = reasonTextField.text
let date = datePicker.date
let moneyText = amountTextField.text ?? ""
let money = Double(moneyText) ?? 0.0
if let transaction = Trancsaction(money: money, reason: reason, date: date) {
member?.addToRawTransactions(transaction)
do {
try transaction.managedObjectContext?.save()
self.navigationController?.popViewController(animated: true)
} catch {
let alert = UIAlertController(title: "Transaktion konnte nicht gespeichert werden", message: "Bitte wiederholen Sie ihre Eingabe", preferredStyle: .alert)
present(alert, animated: true, completion: nil)
}
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}
}
核心数据:
import UIKit
import CoreData
@objc(Trancsaction)
public class Trancsaction: NSManagedObject {
var date: Date? {
get {
return rawDate as Date?
}
set {
rawDate = newValue as NSDate?
}
}
convenience init?(money: Double, reason: String?, date: Date?) {
let appDelegate = UIApplication.shared.delegate as? AppDelegate
guard let context = appDelegate?.persistentContainer.viewContext else {
return nil
}
self.init(entity: Trancsaction.entity() , insertInto: context)
self.date = date
self.money = money
self.reason = reason
}
}
解决方案
推荐阅读
- sql - excel ace.oledb vba 连接到 csv 只返回第一列
- c++ - libpytorch macos 构建:找不到静态库 eigen_blas_LIBRARY-NOTFOUND
- javascript - Javascript 中的回溯/前瞻中的多个匹配项
- python - 从 pandas.core.groupby.generic.DataFrameGroupBy 中删除空数据框
- node.js - 我如何在 Windows 机器中将 PM2 与 nodejs、nginx 集成
- reactjs - 如何检测 RangePicker 的开始和结束日期的 onChange 事件?
- matlab - 多输入网络matlab上的semanticseg可能吗?
- css - 定义最大值 CSS网格中的列宽
- python - 查找集合的所有分区的时间复杂度
- regex - 替换数据框中的字符串模式