Ошибка при попытке развернуть объект области - PullRequest
0 голосов
/ 23 мая 2018

У меня возникает следующая проблема, когда я пытаюсь использовать данные из одного из объектов области. У меня возникает ошибка:

Поток 1: Неустранимая ошибка: неожиданно обнаружен ноль при развертывании необязательного значения

Я в замешательстве, потому что, когда я пытаюсь сделать это вручную на консоли отладки, все работает нормально

(lldb) print food? .MealName (String?) $ 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

1 Ответ

0 голосов
/ 23 мая 2018

Ошибка не связана с Царством.Это очень распространенная ошибка жизненного цикла представления.

Установка randomMeal в контроллере представления назначения вызывает didSet наблюдателя.Наблюдатель собирается получить доступ к IBOutlet, который еще не подключен.

Решение состоит в том, чтобы запустить код в viewDidLoad

var randomMeal = ""

override func viewDidLoad() {
    super.viewDidLoad()
    self.hideKeyboardWhenTappedAround()
    if !randomMeal.isEmpty {
        let selectedMeal = downloadMealData(mealID: randomMeal)
        setUIForMeal(meal: selectedMeal)
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...