iOS Core Data账单图片关联显示功能问题求助
解决选中账单对应照片显示问题
问题核心是当前查看页面未接收选中的账单数据,而是固定读取第0条数据的照片,按以下步骤修改即可实现对应账单照片展示:
1. 给查看页面添加选中账单属性
修改ViewControllerViewing,新增属性接收从列表页传递的选中账单对象,替代全量拉取数据的方式:
import UIKit import CoreData class ViewControllerViewing: UIViewController { // 新增属性:接收选中的账单对象 var selectedBravo: Bravo? @IBOutlet weak var imgDisplay: UIImageView! @IBOutlet weak var lblBill: UILabel! let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext override func viewDidLoad() { super.viewDidLoad() // 页面加载时直接显示选中账单的照片(可选,也可保留按钮触发逻辑) if let bravo = selectedBravo, let photoData = bravo.photo { imgDisplay.image = UIImage(data: photoData) lblBill.text = bravo.provider // 同步显示账单名称 } } @IBAction func btnDisplay(_ sender: Any) { // 直接使用传入的选中账单数据展示照片 if let bravo = selectedBravo, let photoData = bravo.photo { imgDisplay.image = UIImage(data: photoData) } } override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { self.view.endEditing(true) } }
2. 列表页面传递选中账单到查看页面
修改CarViewController的didSelectRowAt方法,添加跳转逻辑并传递选中的账单对象(假设使用Storyboard Segue跳转,Segue标识符设为showBillPhoto):
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let selectedBravo = self.bills[indexPath.row] // 保留原有编辑逻辑,新增查看照片的选项 let alert = UIAlertController(title: "操作账单", message: "选择要执行的操作", preferredStyle: .alert) alert.addTextField() let txtProvider = alert.textFields![0] txtProvider.text = selectedBravo.provider // 填充当前账单名称到输入框 // 保存编辑的按钮 let saveButton = UIAlertAction(title: "保存修改", style: .default) { [weak self] (action) in guard let self = self else { return } selectedBravo.provider = txtProvider.text do { try self.context.save() self.fetchBravo() // 编辑完成后跳转查看照片 self.performSegue(withIdentifier: "showBillPhoto", sender: selectedBravo) } catch { print("保存失败: \(error)") } } // 直接查看照片的按钮 let viewPhotoButton = UIAlertAction(title: "查看照片", style: .default) { [weak self] (action) in guard let self = self else { return } self.performSegue(withIdentifier: "showBillPhoto", sender: selectedBravo) } alert.addAction(saveButton) alert.addAction(viewPhotoButton) alert.addAction(UIAlertAction(title: "取消", style: .cancel)) self.present(alert, animated: true, completion: nil) } // 重写prepare方法传递选中的账单数据 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "showBillPhoto", let destinationVC = segue.destination as? ViewControllerViewing, let selectedBravo = sender as? Bravo { destinationVC.selectedBravo = selectedBravo } }
3. 清理冗余代码
删除ViewControllerViewing中的fetchImage方法和selectedImage属性,不再需要全量拉取数据。
修改完成后,用户选中任意账单,查看页面都会展示对应的账单照片。
内容的提问来源于stack exchange,提问作者JG2022
相关产品推荐
相关产品推荐

