swift: не может получить элементы-сущности из coredata

Я новичок в программировании и недавно начал с swift (xcode 9.4.1, swift 4.x). Возможно, решение довольно простое, но я не понимаю. В интернете есть несколько похожих вопросов и ответов, но у них другой код, и я не знаю, как его адаптировать. Поэтому я хотел бы, чтобы вы мне помогли. Спасибо!

У меня есть iOS-приложение, которое сохраняет статистику в спорте. Я создал две сущности под названием Stat и Game. Сохранение работает с этим кодом:

@IBAction func saveButtonPressed(_ sender: UIButton) {
    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
    let stats = Stat(context: context)
    stats.action = action
    stats.playerNumber = Int32(playerOfAction)
    stats.points = Int32(pointsOfAction)
    let statsMinute = Game(context: context)
    statsMinute.minute = Int32(currentMinute)
    (UIApplication.shared.delegate as! AppDelegate).saveContext()

Теперь я хочу получить и отобразить последнюю сохраненную статистику (и иметь возможность редактировать ее позже). Я пытаюсь это с этим кодом:

   func lastStatInfo() {
    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
    do {

 let loadMin = try context.fetch(Game.fetchRequest()) as [Game]
        lastStatMinuteLabel.text = "\(loadMin.minute)th minute"
    } catch {
        print("didn't load minute")
    }
    do {
        let loadStat = try context.fetch(Stat.fetchRequest()) as [Stat]
        lastStatActionLabel.text = loadStat.action
        lastStatPlaylerLabel.text = "# \(loadStat.playerNumber)"
    } catch {
        print("didn't load stat")
    }
}

Есть три ошибки, такие как 'Value of type '[Game]' has no member 'minute''.Почему атрибуты недоступны? Я думаю, что это потому, что статистика хранится в виде массива. Как правильно получить данные?

Бонусный вопрос: я пробовал разные типы атрибутов моделей данных. Кажется, что для сохранения трикотажных номеров и точек работает только Int32. Можете ли вы сказать мне, почему и если это лучший способ их хранить?

1 ответ

Решение

Ваш запрос на выборку возвращает массив в качестве результата (даже если существует только один объект), поэтому вам нужно зациклить массив или получить только один из определенного индекса

for stat in loadMin {
    var minute = stat.minute
    //do stuff with minute
}

Или же

if !loadMin.isEmpty {
    lastStatMinuteLabel.text = "\(loadMin[0].minute)th minute”
}

Я обычно использую только Int для целочисленных значений.

Другие вопросы по тегам