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

SwiftUI WatchOS应用如何限制Core Data中Goal对象最多创建10个

实现方案

你只需要做两处修改即可完成需求,利用Core Data的@FetchRequest动态响应数据变化的特性,不需要额外写状态监听逻辑:


1. 修改FirstView,实现按钮自动禁用和数量动态展示

找到你FirstView里的NavigationLink和对应数量文本部分,替换为以下代码:

NavigationLink(
    destination: AddGoalView(),
    label: {
        Text("Set Money Goal")
    })
    .disabled(results.count >= 10) // 已存Goal达到10个时自动禁用按钮
Text("\(results.count)/10") // 动态展示当前已创建的Goal数量
    .foregroundColor(results.count >= 10 ? .red : .primary) // 达到上限时文字变红提示

因为results是@FetchRequest查询的结果,会自动随Core Data数据新增/删除更新,所以按钮的禁用状态、数量文本都会自动同步,你删除Goal后按钮会自动恢复可用。


2. 修改AddGoalView的addGoal方法,加逻辑层双重校验

为了避免界面异常绕过按钮限制的情况,在添加逻辑里再加一层数量判断:
首先在AddGoalView的属性部分新增查询,获取已存的Goal总数:

@Environment(\.managedObjectContext) var context
// 新增下面这行查询
@FetchRequest(
    entity: NewGoal.entity(),
    sortDescriptors: []
) private var existingGoals: FetchedResults<NewGoal>

然后在addGoal方法的最开头添加上限判断:

private func addGoal(){
    // 新增判断:已达10个上限直接返回,不执行创建逻辑
    guard existingGoals.count < 10 else {
        // 可选:添加震动反馈提示用户无法新增
        WKInterfaceDevice.current().play(.failure)
        return
    }
    
    // 你原来的addGoal逻辑保持不变
    if index == 0 {
        pickedValueDateS = "W"
        // ... 原有逻辑不变
    }
    // ... 原有逻辑不变
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 01:48:01