【发布时间】:2018-05-23 11:20:22
【问题描述】:
当我尝试使用来自领域对象之一的数据时,我遇到了以下问题 我有一个错误:
线程 1:致命错误:在展开可选值时意外发现 nil
我很困惑,因为当我尝试在调试控制台上手动执行时,一切正常
(lldb) 打印餐点?.mealName (字符串?)$R0 = "Krem buraczany"
我会附上整个代码,告诉你错误出现在哪一行
领域对象:
import UIKit
import RealmSwift
class Meal: Object {
@objc dynamic var mealID : String = ""
@objc dynamic var mealName : String = ""
var ingredients = List<String>()
var mealDescription = List<String>()
@objc dynamic var kcal : Int = 0
@objc dynamic var preparingTime : Int = 0
@objc dynamic var imageName : String = ""
convenience init(mealID: String, mealName: String, kcal: Int, preparingTime: Int, imageName: String) {
self.init()
self.mealID = mealID
self.mealName = mealName
self.kcal = kcal
self.preparingTime = preparingTime
self.imageName = imageName
}
override static func primaryKey() -> String? {
return "mealID"
}
}
通过 segue 发送数据:
@IBAction func ideaForMealButtonPressed(_ sender: UIButton) {
performSegue(withIdentifier: "ideaForMeal", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let destinationVC = segue.destination as! IdeaForMeal
destinationVC.randomMeal = getRandomMeal()
}
func getRandomMeal() -> String {
var mealsCount = realm.objects(Meal.self).count
mealsCount += 1
let randomMealID = arc4random_uniform(UInt32(mealsCount))
print (randomMealID)
return String(randomMealID)
}
接收者:
//Global Variables
let realm = try! Realm()
var randomMeal : String? {
didSet {
let selectedMeal = downloadMealData(mealID: randomMeal!)
setUIForMeal(meal: selectedMeal)
}
}
override func viewDidLoad() {
super.viewDidLoad()
self.hideKeyboardWhenTappedAround()
}
//Background Operations
func downloadMealData(mealID: String?) -> Meal? {
let currentMeal = realm.object(ofType: Meal.self, forPrimaryKey: mealID)
return currentMeal
}
func checkPositionOfTopIngredientsLabel() -> CGFloat {
let maxY = ingredientsTopLabel.frame.maxY
return maxY
}
func setUIForMeal(meal: Meal?) {
mealNameLabel.text = meal!.mealName // Error!
mealImage.image = UIImage(named: meal!.imageName)
preparingTimeLabel.text = String(meal!.preparingTime)
kcalLabel.text = String(meal!.kcal)
}
谢谢!
BR iMat
【问题讨论】: