You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI直升机游戏Core Data实现报错:FetchedResults无name成员

问题原因

你遇到的Value of type 'FetchedResults' has no member 'name'报错是变量引用错误导致的:
在ScoresList的ForEach循环中,你声明的单个循环元素变量名为score,但你在Text中调用的是整个查询结果集合scores的name属性,FetchedResults是数组类型,本身不存在name属性,所以触发编译报错。

修复方案

1. 修正ScoresList的循环引用

把Text("\(scores.name!")改成调用单个元素score的属性即可,同时可以加个空值判断避免崩溃,也可以给查询加个排序规则让分数展示更合理:

import SwiftUI
import CoreData

struct ScoresList: View{
    @Environment(\.managedObjectContext) var context
    // 按分数字符串倒序排序,也可以后续把name改成Int16类型更适合做数值排序
    @FetchRequest(entity: Scores.entity(), sortDescriptors: [NSSortDescriptor(key: "name", ascending: false)]) var scores: FetchedResults<Scores>
    
    var body: some View{
        List{
            ForEach(scores, id: \.self) { score in
                Text("\(score.name ?? "无有效分数")")
            }
        }
    }
}

2. 可选优化GameView的保存逻辑

现在你需要用户手动修改TextField里的分数才能保存,完全可以在游戏结束自动把当前分数赋值给newScoreValue,省去手动操作:
在GameView的body末尾(edgesIgnoringSafeArea之前)加个状态监听:

.onChange(of: isPaused) { paused in
    if paused {
        newScoreValue = "\(score)"
    }
}

3. 确认Core Data上下文注入

要确保你的项目入口已经把Core Data的托管上下文注入到SwiftUI环境中,不然保存和查询都会失效:

  • 如果是SwiftUI App生命周期(有@main的App结构体):
@main
struct HelicopterApp: App {
    let persistenceContainer = (UIApplication.shared.delegate as! AppDelegate).persistentContainer

    var body: some Scene {
        WindowGroup {
            ContentView()
                .environment(\.managedObjectContext, persistenceContainer.viewContext)
        }
    }
}
  • 如果是UIKit SceneDelegate生命周期,在willConnectTo方法中添加:
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let contentView = ContentView().environment(\.managedObjectContext, context)
// 后续把contentView赋值给rootViewController的rootView即可

另外还要确认你的Core Data模型文件名称和NSPersistentContainer初始化传入的name一致,都是Scores,避免存储加载失败。


内容的提问来源于stack exchange,提问作者MixedByInstinct

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 23:24:03