【问题标题】:swift: can't fetch entity-members from coredataswift:无法从 coredata 中获取实体成员
【发布时间】:2018-07-25 16:47:46
【问题描述】:

我是编程新手,最近开始使用 swift(xcode 9.4.1,swift 4.x)。可能解决方案很简单,但我不明白。 www中有一些类似的问题和答案,但他们有不同的代码,我不知道如何适应它。所以我希望你能帮帮我。谢谢!

我有一个 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''. 为什么属性不可访问?我认为这是因为统计信息存储为数组。 如何正确获取数据?

Bonusquestion:我为我的数据模型属性尝试了不同的类型。为了保存球衣号码和积分,只有 Int32 似乎有效。你能告诉我为什么以及它是否是存储它们的最佳方式吗?

【问题讨论】:

    标签: ios arrays swift core-data fetch


    【解决方案1】:

    您的 fetch 请求返回一个数组作为结果(即使只存在一个对象),因此您需要循环该数组或仅从特定索引中获取一个

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

    或者

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

    我通常只将 Int 用于整数值。

    【讨论】:

    • 谢谢。循环有效。希望我能适应我需要的其他情况。无法使用 Int,因为在 xcdatamodeld 中您可以选择 ether Int16、Int32 或 Int64。我最后一次尝试它不适用于 Int16(但我无法解释这一点)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    相关资源
    最近更新 更多