无法使用Delegate更新UITableViewCell中的标签

时间:2017-04-22 15:23:49

标签: ios swift uitableview

我的应用程序中有一份食物日记,可以追踪你每天吃的食物,但是我很难在UITableViewCell更新我的卡路里标签。我按下"保存到食物日记"我的应用程序崩溃了并且错误如下:

"fatal error: unexpectedly found nil while unwrapping an Optional value"

以下是我的PopUpVCUIViewController中的代码,用户可以看到输入FoodNameCalories

protocol AddRowDelegate {
    func didAddRow(name : String, calories : String)
}

class PopupVC: UIViewController {

var delegate: AddRowDelegate?
var section: Int?
var caloriesLabel = " "

var tableData: [String] = [""]

var caloriesCell = caloriesForDiary()
@IBOutlet weak var foodTimeLabel: UILabel!
@IBOutlet weak var foodPopup2: UIView!
@IBOutlet weak var foodPopUp: UIView!
@IBOutlet weak var inputFood: UITextField!
@IBOutlet weak var inputCals: UITextField!

@IBAction func saveToDiary(_ sender: Any) {
    dismiss(animated: true, completion: nil)
    delegate?.didAddRow(name: inputFood.text!, calories: inputCals.text!)
}

然后我将来自食物和卡路里UItextFields的输入传递给我的FoodDiaryVC

func didAddRow(name: String, calories: String) {        
    cals.calories.text = calories    
    print(name)
    print(calories)
}   

我添加了显示错误和ViewController的图片。我不确定为什么它找到/返回零?我基本上只想设置我的卡路里标签等于输入(或整天的cals积累)

popupVC

error

caloriescell

2 个答案:

答案 0 :(得分:1)

您的calscalories对象为nil,导致崩溃。您没有在发布的代码中包含此对象,但请确保在访问对象之前对其进行实例化。

答案 1 :(得分:0)

嗨我不知道导致崩溃的原因是什么,但我相信它可以调试。按照我的建议,执行以下步骤。将方法 didAddRow 更改为

func didAddRow(name: String, calories: String) {
   if(calories.characters.count != 0 && cal != nil)   {
      cal.calories.text = calories 
   }
    print(name)
    print(calories)
}

如果这不能提供合适的结果,请尝试在此方法中打印卡路里和卡路里。检查插座并在此方法中设置断点。