SwiftUI 更新核心数据对象更改视图

2023-11-24

我遇到的问题是,当我从工作表视图更新核心数据资产对象时,更改不会反映在 AssetListView 的 UI 中。 (请注意,从工作表视图插入新对象does刷新 AssetListView 的 UI。删除工作表视图中的对象也刷新AssetListView 的 UI)唯一不起作用的操作是更新。

如何让AssetListView随着核心数据对象的变化而变化?

我有以下 SwiftUI 代码,显示来自 CoreData FetchRequest 的资产列表:

struct AssetListView: View {
    @State private var showingSheet = false
    @State private var selectedAssetId: NSManagedObjectID?
    @Environment(\.managedObjectContext) var moc
    @FetchRequest(entity: Asset.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \Asset.allocationPercentage, ascending: false)]) var assets: FetchedResults<Asset>
    
    var body: some View {
        VStack {
            Form {
                 ForEach(assets, id: \.self) { asset in
                    Section {
                        AssetRowView(asset: asset)
                            .onTapGesture {
                                self.selectedAssetId = asset.objectID
                                self.showingSheet = true
                        }
                    }
                }
            }
            
        }
        .navigationBarTitle("Assets").sheet(isPresented: $showingSheet ) {
                EditAssetView(assetId: self.selectedAssetId!)
                    .environment(\.managedObjectContext, self.moc)
                }
        }
     }
}

这是一个编辑屏幕,我将其呈现为 SwiftUI 表:

struct EditAssetView: View {
    var assetId: NSManagedObjectID
    @Environment(\.presentationMode) var presentationMode
    @State private var name = ""
    @State private var description = ""
    @Environment(\.managedObjectContext) var moc
    
    var asset: Asset {
        moc.object(with: assetId) as! Asset
    }
   
    var body: some View {
        NavigationView {
            Form {
                Section {
                    TextField("Name", text: $name)
                    TextField("Description", text: $description)
                }
            }
            .navigationBarTitle(Text("Edit Asset"), displayMode: .inline)
            .navigationBarItems(leading: Button("Cancel") {
                self.presentationMode.wrappedValue.dismiss()
                }, trailing: Button("Done") {
                    self.presentationMode.wrappedValue.dismiss()
                    self.asset.name = self.name
                    self.asset.assetDescription = self.description
                    try? self.moc.save()
                }
            )
        }
        .onAppear {
            self.name = self.asset.name
            self.description = self.asset.assetDescription
        }
    }
}

这是 AssetRowView 的代码:

struct AssetRowView: View {
    var asset: Asset?
    
    var body: some View {
        HStack {
           Text(asset.name)
           Text(asset.assetDescription)
        }
    }
}

尝试观察Asset (cause NSManagedObject is-a ObservableObject)

struct AssetRowView: View {
    @ObservedObject var asset: Asset        // << here !!
    
    var body: some View {
        HStack {
           Text(asset.name)
           Text(asset.assetDescription)
        }
    }
}

如果这还不够,可能还需要更新Done按钮动作为

}, trailing: Button("Done") {
    self.asset.objectWillChange.send()             // << here !!
    self.asset.name = self.name
    self.asset.assetDescription = self.description
    try? self.moc.save()

    // better do this at the end of activity
    self.presentationMode.wrappedValue.dismiss()
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SwiftUI 更新核心数据对象更改视图 的相关文章

  • Swift 结构类型集

    说我有一个struct 可以是任何东西 struct Cube var x Int var y Int var z Int var width Int 然后我该如何创建一个Set这些点中 是否存在两个具有相同属性的对象 let points
  • 从软件查找服务返回无效结果

    我尝试通过 XCode 组织者提交 iOS 应用程序 但在身份验证后失败 组织者说 从软件查找服务返回的结果无效 我怎么解决这个问题 检查 iTunes Connect 中您的应用程序状态是否为 等待上传 您可以更改状态以按 准备上传二进制
  • Draggable Boxview 不更新 Xamarin

    我的第一个问题是框视图生成在左上角 而不是我指定的设计网格第 10 行和网格第 3 列 第二个问题在于可拖动视图 在代码本地可拖动视图的第一部分中 它正确地调用了触摸事件 但也许它没有在GUI中更新
  • iPad Safari Web Inspector 在页面加载时崩溃

    我有一个用 WordPress 制作的以视频为中心的网站 当我们在 iPad 上测试网站时 我们将其连接到 Mac 笔记本电脑并打开 safari 开发人员工具来检查是否有任何错误等 我们的主页上一切正常 但当我们转到我们添加的任何视频帖子
  • UIAlertAction 处理程序在延迟后运行

    我正在尝试将 UIAlertViews 更改为 UIAlertControllers 我为此设置了这个操作 UIAlertAction undoStopAction UIAlertAction actionWithTitle Undo St
  • 在 iOS Safari 上滚动后锚点失去点击能力

    使用它来获取点击次数 nav li a click function event event preventDefault target this attr href replace goToByScroll target 这是滚动功能 f
  • 是否可以对 UILabel 的文本颜色变化进行动画处理? [复制]

    这个问题在这里已经有答案了 UIView animateWithDuration 5 animations myLabel textColor UIColor redColor 标签文本颜色立即改变 Try this UIView tran
  • iOS5 和 Facebook API

    我想将我的应用程序与 Facebook 集成并从 github 下载 Facebook ios sdk 但是 该 sdk 适用于 Xcode 4 0 代码库 我正在使用 Xcode 4 2 for iOS 5 beta 5 应用程序 是否有
  • 如何使用呼叫目录扩展来识别应用程序中的来电?

    我正在研究callKit框架 我发现通过使用呼叫目录扩展 我们可以识别来电电话号码 我的问题是如何在 iOS 应用程序中实现呼叫目录扩展来识别来电详细信息 我在 Objective C 工作 让一个数 919876xxxxx 使用此方法添加
  • 使用基于 Cookie 的身份验证的 Capacitor iOS

    我正在使用 Capacitor v3 NextJS 静态导出和 Django 后端基于生产网站构建 iOS 应用程序 当前的后端身份验证方案通过 cookie 使用 Django 会话 并通过 cookie 设置 CSRF 令牌 应用程序可
  • 如何将 SCNPlane 颜色更改为透明颜色

    我正在开发一个 ARKit 项目 在水平面上点击时需要波纹动画效果 为此 我采用了 UIView 对象并将其作为 SCNPlane 对象材料的内容传递 我已将波纹动画添加到 UIView 对象 一切正常 但我无法将 SCNPlane 颜色更
  • 增量后清除推送通知徽章

    我正在研究 iPhone 中的推送通知 当我收到推送通知时 它在我的应用程序图标上显示 1 下次显示 2 3 4 如果我打开应用程序 它是 0 下次它应该是 1 2 3 4 但它显示最后一个数字和 1 我想在打开应用程序后重置推送通知徽章
  • 使用 UIWebView 显示 PDF 不起作用

    因此 我意识到有关使用 UIWebView 在应用程序 在 iPad 上 中显示 PDF 存在很多问题 我已经审查了我能找到的所有内容 但似乎找不到任何满意的东西 我想做的事情非常基本 所以我真的不知道为什么它不起作用 我需要做的就是在 U
  • 旋转 GPUImageTiltShiftFilter - GPUImage

    我想要一个非水平 GPUImageTiltShiftFilter 旋转 我想将其旋转到任意旋转角度 我还希望过滤器速度快 可以通过带有 UIRotationGestureRecongizer 的 UI 进行旋转 我该怎么做呢 啊 想通了 不
  • UNTimeIntervalNotificationTrigger nextTriggerDate() 是否给出了错误的日期?

    我正在更新本地通知以与 iOS 10 配合使用 但遇到了一个问题 我认为 nextTrigger 函数返回的不是 满足触发条件的下一个日期 而是返回当前日期时间加上您最初设置 UNTimeInvervalNotificationTrigge
  • 在 Swift 中,如何为具有自动布局的 UIView 制作动画,就像页面滑入一样?

    我尝试创建一个 UIView 来表示一个大小与设备屏幕相同的页面 由于该应用程序支持方向 因此我使用 AutoLayout 来构建它 它工作正常 直到我尝试将页面动画化以从右侧滑入 经过一番研究后 我能想到的最好的办法是 myView UI
  • dyld:无法加载插入的库,但可以在模拟器和另一部 iPhone 上使用

    所以我在过去的几个小时里在我的应用程序上编码 在某个时候我决定在我的 iPhone 8 13 3 1 上启动我的应用程序而不是使用模拟器 13 3 它立即崩溃并出现以下错误 dyld warning could not load inser
  • 如何将NSTextView的格式化内容转换为字符串

    我需要将 NSTextView 的内容从 Mac 应用程序传输到 iOS 应用程序 我使用 XML 作为传输文件格式 所以我需要将 NSTextView 的内容 文本 字体 颜色等 保存为字符串 有什么办法可以做到这一点吗 一种方法是存档
  • 应用程序仅启用纵向,但 UIImagePickerController 在 iOS6 中旋转

    请注意 下面的答案 不适用于 iOS6 所以我仍然需要答案 我的应用程序仅启用纵向模式 但是 如果我将 UIImagePickerController 作为子视图嵌入其中 并旋转设备 则顶部和底部栏将保持在同一位置 但 UIImagePic
  • 游戏中心玩家显示名称在沙盒中始终为“我”

    我使用用户的游戏中心显示名称和玩家 ID 来维护他们在我的服务器上的个人资料 当我进行测试时 一切似乎都正确执行 但我的沙箱帐户的用户显示名称显示为 Me 而不是附加到我的帐户的显示名称 Billybobbo 这应该在沙盒模式下发生吗 Co

随机推荐

  • Rails 会话当前实践

    有人对 Rails 和会话有任何 最佳实践 提示吗 Rails 3 的默认会话类型仍然是 CookieStore 对吧 我使用 SqlSessionStore 一段时间并且效果很好 但我可能会放弃它而转而使用 CookieStore 即使使
  • 如何在 Flutter 中格式化日期时间

    我正在尝试显示当前的DateTime in a Text点击按钮后的小部件 以下有效 但我想更改格式 目前的方法 DateTime now DateTime now currentTime new DateTime now year now
  • 访问 NSIS 中的命令行参数

    我正在尝试使我的设置脚本模块化 我根据要求从主安装脚本中调用安装 exe 我想将命令行参数传递给被调用的 exe 有人可以告诉我如何访问正在调用的脚本中的命令行参数吗 提前致谢 您可以使用GetOptions功能 FileFunc nsh必
  • 如何通过 JavaScript 或 CSS 检查用户是否处于高对比度模式

    When pressing Shift Left Alt Print Windows switches into high contrast mode is there any chance to detect that on a web
  • ConcurrentHashMap的Segment和HashMap的Bucket理论上有什么区别?

    我知道在HashMap中 条目 Key Value 基于hash Key hashCode gt 表示存储桶位置的索引 如果条目已放置在该位置 则会创建一个链接列表和新条目 如果它有不同的键 gt 通过equals method 被放置在链
  • Dependency Walker 报告 IESHIMS.DLL 和 WER.DLL 丢失?

    在带有 Internet Explorer 8 的 Windows XP Professional SP3 上 当我对我的可执行文件运行 Dependency Walker 时 它会报告 IESHIMS DLL 和 WER DLL 无法找到
  • 在 RAD Studio 中使用正则表达式替换文本

    我想替换例如F G X Y with H X Y 在 RAD Studio IDE 中 我使用的正则表达式是 求表达式 F G 替换表达式 H 1 结果并不像我想象的那样 Result H 1 RAD Studio 似乎无法将 1 识别为两
  • 将 Python 函数存储在 JSON 中

    假设我有一个 JSON 文件 如下所示 x 5 y 4 func def multiplier a b return a d 这过度简化了我想要尝试和做的事情 但基本上我正在尝试将 python UDF 写入 JSON 文件 有没有办法做到
  • 为什么仅在存在存储初始化循环时才计算用户模式 ​​L1 存储未命中事件?

    Summary 考虑以下循环 loop movl 0x1 rax add 0x40 rax cmp rdx rax jne loop where rax被初始化为大于 L3 缓存大小的缓冲区的地址 每次迭代都会对下一个缓存行执行存储操作 我
  • Clojure 中的不一致:宏中的函数和 IllegalArgumentException

    以下两个在宏中使用函数的示例导致评估没有错误 defmacro works let f fn 1 f works gt 1 defn my nullary fn fn 2 defmacro also works let f my nulla
  • Rails habtm 连接

    我之间有这种关系类别 产品和品牌 class Brand lt ActiveRecord Base has many products end class Category lt ActiveRecord Base has and belo
  • x86 CPU 上中断延迟的估计

    我正在寻找有助于估计 x86 CPU 中断延迟的信息 这篇非常有用的论文可以在 datasheets chipdb org Intel x86 386 technote 2153 pdf 中找到 但这篇论文给我提出了一个非常重要的问题 如何
  • 在Java中,如何从派生类中的重写方法调用基类的方法?

    我有两个Java类 B 它扩展了另一个类A 如下 class A public void myMethod class B extends A public void myMethod Another code 我想致电A myMethod
  • 用户代理可以在其请求中设置大于零的 max-age 吗?

    我有一个疑问max age读取 Http 缓存后的行为rfc 设想 用户代理 GET foo 源服务器响应头 cache control max age 120 服务器告诉用户代理所请求的资源应在 2 分钟后重新验证 1分零几秒后 用户代理
  • 将列和行大小重置为默认值

    我正在构建一个脚本 通过自定义菜单项访问 其中还将包含一些样式 例如设置背景颜色 更改列宽 行高以及插入大量内容 现在我想实现一个 重置 功能 setall单元格恢复为默认的空 Google 表格的样子 包括所有内容 我找到了clear f
  • UISearchController - 警告尝试加载视图控制器的视图

    我收到以下错误 尝试加载视图控制器的视图 不允许解除分配并可能导致未定义的行为 尝试了以下解决方案 但对我不起作用正在解除分配时尝试加载视图控制器的视图 UISearchController 链接中提供了演示项目 点击主控制器中的添加按钮
  • Google App Engine 模块间通信授权

    In the 谷歌文档 it says 您可以将任何手动或基本扩展模块配置为接受来自应用程序中其他模块的请求 方法是将其处理程序限制为仅允许管理员帐户 并在模块的配置文件中为适当的处理程序指定 login admin 实施此限制后 来自应用
  • “控制器”是命名空间,但像类型一样使用

    当我创建新控制器时总是抛出错误 Controller 是命名空间 但像类型一样使用 我不知道如何修复它 我已经安装了该包 在此输入图像描述 将文件夹名称更改为 Controllers 将命名空间更改为 Controllers 因此您的代码应
  • 未复制引用的项目依赖项 DLL

    我的项目解决方案目前有三个项目 我的项目 这是我的主要启动项目 使用 NET Framework 4 7 WPF 特定于 UI 我的项目 核心 类库 NET Standard 2 0 保存模型以及所有 幕后 数据 我的项目 关系 类库 NE
  • SwiftUI 更新核心数据对象更改视图

    我遇到的问题是 当我从工作表视图更新核心数据资产对象时 更改不会反映在 AssetListView 的 UI 中 请注意 从工作表视图插入新对象does刷新 AssetListView 的 UI 删除工作表视图中的对象也刷新AssetLis