首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SwiftUI:如果@ObservedObject是UIViewController的子类,则不会重新加载视图内容。这是一个bug,还是我漏掉了什么?

根据提供的问答内容,SwiftUI中的@ObservedObject属性包装器用于观察对象的变化并自动更新视图。根据描述,如果@ObservedObject是UIViewController的子类,则视图内容不会重新加载。这可能是一个bug,也可能是由于某些其他原因导致的。

要解决这个问题,可以尝试以下几个步骤:

  1. 确保@ObservedObject属性正确地绑定到UIViewController的子类实例。确保在视图中正确地声明和使用@ObservedObject属性。
  2. 检查被观察对象是否正确实现了ObservableObject协议,并且在属性发生变化时发送了正确的通知。
  3. 确保在UIViewController的子类中正确地更新被观察对象的属性。确保在属性发生变化时调用objectWillChange.send()方法。
  4. 检查是否有其他代码或逻辑导致视图内容不会重新加载。例如,可能存在其他属性包装器或条件语句,导致视图不会更新。

如果以上步骤都没有解决问题,那么很可能是一个bug。在这种情况下,建议查看SwiftUI的官方文档、开发者论坛或提交一个bug报告给苹果开发团队以获得进一步的帮助和支持。

关于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,我无法给出具体的腾讯云产品链接。但是,腾讯云提供了丰富的云计算服务,包括云服务器、云数据库、云存储等,您可以访问腾讯云官方网站以了解更多信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SwiftUI @State @Published @ObservedObject 深入理解和使用

但是相信我,这是值得:随着你进步,你会了解到SwiftUI经常破坏和重新创建你结构体,所以保持它们小而简单结构对性能很重要。...提示:在SwiftUI中存储程序状态有几种方法,您将学习所有这些方法。@State专门为存储在一个视图简单属性而设计。...") }) } } 3.最重要部分 (代码注释部分最为主要,务必看完) 虽然上面案例运行中什么都正常展示加载,但是到了实际项目中,却一堆bug这是如何导致如果对 这三种状态跟...因为SwiftUI更新数据前提触发 第一层 绑定对象 wrapperModel下属性(字段)发生更新才会调用视图层更新数据 但是 第一次下绑定对象还绑定了 @ObservedObject 或者其他类型对象呢...:不是 如果层次再深一点model 还是bug,触发不了 4.总结以及解决方案 /// 既然我们知道View 跟 状态绑定关系 /// 是以第一继承ObservableObject 类 下属性(

3.1K10

避免 SwiftUI 视图重复计算

并且 SwiftUI 会在其变化时自动更新( 重新计算 )对应视图SwiftUI 上有一个困扰了不少人问题:为什么无法在视图构造函数中,更改 State 包装变量值?...@ObservedObject var store = Store() // 每次创建视图类型实例,都会重新创建 Store 实例 由于 SwiftUI 会不定时地创建视图类型实例( 非加载视图 ),...每次创建过程都会重新创建一个引用对象,因此假设使用上面的代码( 用 @ObservedObject 创建实例 ),让 @ObservedObject 指向一个不稳定引用实例时,很容易出现一些怪异现象...例如:当 SwiftUI 在更新 ContentView 时,如果 SubView 构造参数( name 、age )内容发生了变化,SwiftUI 会对 SubView body 重新求值(...这是因为,我们将 Student 类型作为参数传递给了子视图SwiftUI 在比对实例时候,并不会关心子视图中具体使用了 student 中哪个属性,只要 student 发生了变化,那么就会重新计算

9.2K81
  • Ask Apple 2022 与 SwiftUI 有关问答(上)

    A:EnvironmentObject 一个很好工具。如果你不想让父视图也被更新,可以在创建对象时不使用 @StateObject 或 @ObservedObject 。...对于苹果工程师给予建议有一点请注意,那就是如果有在父视图中修改该环境对象实例需求,须确保父视图不会被反复重构( SwiftUI 重新创建视图类型实例 )。...在有些情况下,想根据视图是否折叠来做决定( 例如,如果展开,在详细视图中显示一条信息,如果折叠,显示一个警告或其他指示 )。...是否可以认为,如果水平尺寸类紧凑( compact ),它就是折叠还是一个更可靠判断方法?A:紧凑( compact )确实对应于一个折叠导航分割视图。...使用它们应该只创建一个实例,然后可以在子视图中读取。这应该不会增加内存使用( 如果有的话,请提出反馈 )。如果你向你模型对象追加越来越多数据,你可能会增加内存使用,这是很正常

    12.2K20

    如何让 SwiftUI 列表变得更加灵活

    前言 List 可能 SwiftUI 附带内置视图中最常用一种,它使我们能够在任何 Apple 平台上呈现“类似于表格视图用户界面。...使用新速记语法 让我们从一个很小特性开始,这是一个非常受欢迎变化,可以使用类似 enum 速记语法来引用 SwiftUI 附带任何内置 ListStyle 类型。...下拉刷新 就个人而言,下拉刷新在 SwiftUI 功能请求列表中非常重要,所以我很高兴看到今年版本增加了对这种非常常见 UI 范式内置支持。...不仅如此,下拉刷新由 async/await 提供支持,不需要增加任何额外代码就可以让系统知道什么时候重新加载结束。...可定制分隔符 自从引入 SwiftUI 以来,开发者们有一个非常普遍要求,提供一个 API ,用于隐藏或以其他自定义实现列表中每个 item 之间默认分隔符。

    4.9K41

    StateObject 与 ObservedObject

    StateObject SwiftUI 2.0 中才添加属性包装器,它出现解决了在某些情况下使用 ObservedObject 视图会出现超预期问题。...下文中将详细探讨其中原因。原理ARCSwift 使用自动引用计数( ARC )来跟踪和管理引用类型实例内存使用情况。只要还有一个对类实例强引用存在,ARC 便不会释放该实例占用内存。...描述、实例与视图SwiftUI 一个声明式框架,开发者用代码来声明( 描述 )想要 UI 呈现。...由于实例会反复创建,因此,开发者必须用特定标识( @State、@StateObject 等 )告诉 SwiftUI ,某些状态视图存续期绑定,在存续期期间唯一。...请阅读 避免 SwiftUI 视图重复计算[3] 一文,了解更多有关 DynamicProperty 实现细节ObservedObject 偶尔出现灵异现象原因如果使用类似 @ObservedObject

    2.4K20

    @StateObject 研究

    @StateObject 研究 如想获得更好阅读体验可以访问我博客 www.fatbobman.com 为什么要新增@StateObject 在之前文章@State研究中我们探讨过@State,...在SwiftUI 1.0时代,如果想将引用类型作为source of truth,通常方法使用@EnvironmentObject或者 @ObservedObject。...当再次进入link后,@StateObject对应视图中计数清零(由于返回父视图,再次进入时会重新创建视图,所以会重新创建实例),不过@ObservedObject对应视图中计数不清零。...对个人而言,基本失去了使用其理由(可用于绑定父视图传递@StateObject)。...个人还是更推荐将来都使用@StateObject来消除代码运行不确定性。 通过下述代码,使用@StateObject同样可以得到测试2中ObservedObject运行效果。

    1.1K40

    架构之路 (五) —— VIPER架构模式(一)

    在Data Sources组中,有用于保存或加载数据辅助函数。 如果您喜欢在WaypointModule组中查看前面的内容。它有一个Waypoint编辑屏幕VIPER实现。...如果您现在构建并运行,您将不会看到任何有趣东西。 然而,在本教程结束时,您将拥有一个功能齐全道路旅行计划应用程序。 ---- What is VIPER?...VIPER一种类似MVC或MVVM体系结构模式,但是它通过单一职责进一步分离了代码。苹果风格MVC促使开发者将所有的逻辑放到一个UIViewController子类中。...使用这种方法,你在storyboard中定义View,Controller一个关联UIViewController子类。控制器Controller修改视图,接受用户输入并直接与模型交互。...Editing Waypoints 最后一个功能添加路点编辑功能,这样您就可以进行自己旅行了!您可以在trip detail视图重新排列列表。

    17.4K10

    ObservableObject研究

    单一数据源 在去年阅读王巍写SwiftUI 与 Combine 编程》才第一次接触到单一数据源这一概念。 •将 app 当作一个状态机,状态决定用户界面。...,数据流并非完全单向•在部分视图中可以结合SwiftUI通过其他包装属性如@FetchRequest等将状态局部化 后两项利用SwiftUI特性,也可以不采用,完全采用单向数据流方式 基于以上方法...在SwiftUI下开发,无论主观还是客观都需要你将View表述精细化,用更多子View来组成你最终视图,而不是把所有的代码都尽量写在同一个View上。...,最终采用了如下解决方案: 1、Store不变,只是去掉了ObservedObject class Store{ var state = AppState() ...} 2、State结构如下...尤其当你忘了写.onReceive时,程序并不会报错,但同时数据不会实时响应,反倒增加排查错误难度。

    2.4K60

    SwiftUI数据流之State&Binding

    struct拷贝,所以其中一个Viewstruct值发生变化,对另一个没有影响;反之,如果class则会互相影响; 当User一个结构体时,每次我们修改这个结构体属性时,Swift实际上在创建一个结构体实例...@State能够发现这个变化,并自动重新加载我们视图。现在如果改为class,我们有了一个类,这种行为就不再发生,Swift可以直接修改值。...如果User一个类,属性本身就不会改变,所以@State不会注意到任何东西,也无法重新加载视图。即使类内某个属性值发生变化,但@State不监听这些,所以视图不会重新加载。...,为了简化内容说明核心问题,只有两行内容,父视图ProductsView,其中嵌套着子视图FilterView和列表元素,为了能够使得FilterView中对showFavorited修改能够传递回父视图... #0 注意user地址发生了变化,开始时创建user被销毁又重新创建了,这是因为@State 修饰属性所有相关操作和状态改变都应该是和当前视图生命周期保持一致

    4K30

    SwiftUI 状态管理系统指南

    为了更详细地探讨这意味着什么,让我们现在假设我们想创建一个视图,让我们用户编辑他们最初在注册时输入个人资料信息。...因此,虽然下面的内容在技术上可能会被编译,但最终会导致运行时问题——因为当我们视图在更新时被重新创建,UserModelController实例可能会被删除(因为我们视图现在主要所有者):...标记为StateObject属性与ObservedObject行为完全相同——此外,SwiftUI将确保存储在此类属性中任何对象不会因为框架在重新渲染视图重新创建新实例而被意外释放: struct...小结 SwiftUI管理状态方式绝对该框架最有趣方面之一,它可能需要我们稍微重新思考数据在应用中传递方式——至少在涉及到将被我们UI直接消费和修改数据时这样。...希望这篇指南能成为一个很好方式来概述SwiftUI各种状态处理机制,尽管一些更具体API被遗漏了,这篇文章中强调概念应该涵盖了所有基于SwiftUI状态处理绝大多数用例。

    5.1K20

    SwiftUI-数据流

    数据处理基本原则 Data Access as a Dependency:在 SwiftUI 中数据一旦被使用就会成为视图依赖,也就是说当数据发生变化了,视图展示也会跟随变化,不会像 MVC 模式下那样要不停同步数据和视图之间状态变化...A Single Source Of Truth: 保持单一数据源,在 SwiftUI 中不同视图之间如果要访问同样数据,不需要各自持有数据,直接共用一个数据源即可,这样做好处无需手动处理视图和数据同步...,并且伴随着而来就是各种 BugSwiftUI 解决办法就是使用 @Binding。...不过值类型在传递时会发生复制操作,所以给传递后值类型即使属性更新了也不会触发最初传过来值类型重新赋值,所以界面并不会刷新,此时需要用@Binding,因为它可以将值类型转为引用类型,这样在传递时...,这种视图拼装方式大大提高了界面开发灵活性和复用性,视图组件化并任意组合方式 SwiftUI 官方非常鼓励做法。

    10.1K20

    @State 研究

    研究意义何在 在去年底使用了SwiftUI写了第一个 iOS app 健康笔记,这是第一次接触响应式编程概念。在有了些基本认识和尝试后,深深被这种编程思路所打动。...类型及作用域图片来自于SwiftUI for Absoloute Beginners 其中@State只能用于当前视图,并且其对应数据类型为值类型(如果非要对应引用类型的话必须在每次赋值时重新创建新实例才可以...我们可以和使用@State一样来使用@MyState,同样支持绑定、修改,除了视图不会自动刷新。 但至少我们可以大概了解@State如何让我们在视图中修改、绑定数据什么时候建立依赖?...目前无法找到任何关于SwiftUI建立依赖更具体资料或实现线索。不过我们可以通过下面两段代码来猜测编译器如何处理数据和视图之间依赖关联时机。...推测@State同视图依赖在ViewBuilder解析时进行。编译器在解析我们body时,会判断date数据变化是否会对当前视图造成改变。如果没有则不建立依赖关联。

    2.9K20

    SwiftUI:使用 @EnvironmentObject 从环境中读取自定义值

    您已经了解了如何使用@State处理单个视图局部状态,以及@ObservedObject如何使我们在视图之间传递一个对象,以便我们可以共享它。...如果我们使用@ObservedObject,则需要将我们对象从每个视图传递到下一个视图,直到它最终到达可以使用该视图视图E,这很烦人,因为B,C和D不在乎它。...环境对象一个​​复杂性其子对象构成,因为视图可以访问环境对象取决于其父视图。...这意味着,如果视图A导航视图所有压入导航堆栈视图都可以访问同一环境。但是,如果视图A以工作表(sheet)形式显示视图B,它们不会自动共享环境数据,因此我们需要手动发送。...Apple已将此工作表情况描述为他们想要修复错误,因此希望在以后对SwiftUI更新中会有所改变。

    9.6K20

    SwiftUI 与 Core Data —— 数据定义

    欢迎大家在 Discord 频道[2] 中进行更多地交流从 Todo 开始Todo 为这个系列文章准备一个演示应用。...遗憾,托管对象对于以值类型为主 SwiftUI 来说并不算友好,因此,不少开发者都会在视图中将托管对象实例转换成一个结构体实例以方便接下来操作( 如何在 Xcode 下预览含有 Core Data...对于 SwiftUI 来说,托管对象具备两个非常显著特点:懒加载托管对象所谓托管指:该对象被托管上下文所创建并持有。仅在需要时候,才从数据库( 或行缓存 )中加载所需数据。..._wrappedValue = wrappedValue }}现在,在 SwiftUI 视图中,MockGroup 将具备与 C_Group 几乎一样能力,唯一不同,它是通过一个 TodoGroup...如果仅为达成此目的,直接对 GroupCellView 视图进行预览就好了,为什么要如此大费周章?

    2.4K40

    SwiftUI + Core Data App 内存占用优化之旅

    尽管 SwiftUI 惰性容器以及 Core Data 都有各自内存占用优化机制,但随着应用视图内容复杂( 图文混排 ),越来越多开发者遇到了内存占用巨大甚至由此导致 App 崩溃情况。...SwiftUI 惰性视图容器拥有对符合 DynamicViewContent 协议内容( 通过 ForEach 生成内容 )进行优化能力。...这意味着,在惰性容器中,视图一经创建,其存续期将与该容器一致( 容器不销毁,视图将始终存续 )。...如果我们能够在视图离开可视区域时,能让托管对象重新进入惰值状态,或许又能节省一部分内存。...不过通过实验中分析,这些数据肯定是被缓存,且在被加载后,并不会因为返回惰值而自动从内存中清除 因此,即使我们将托管对象返回成惰值状态,也仅能节省极少内存占用( 在本例中几乎可以忽略不计 )。

    2.4K40

    SwiftUI + Core Data App 内存占用优化之旅

    尽管 SwiftUI 惰性容器以及 Core Data 都有各自内存占用优化机制,但随着应用视图内容复杂( 图文混排 ),越来越多开发者遇到了内存占用巨大甚至由此导致 App 崩溃情况。...SwiftUI 惰性视图容器拥有对符合 DynamicViewContent 协议内容( 通过 ForEach 生成内容 )进行优化能力。...这意味着,在惰性容器中,视图一经创建,其存续期将与该容器一致( 容器不销毁,视图将始终存续 )。...如果我们能够在视图离开可视区域时,能让托管对象重新进入惰值状态,或许又能节省一部分内存。...不过通过实验中分析,这些数据肯定是被缓存,且在被加载后,并不会因为返回惰值而自动从内存中清除 因此,即使我们将托管对象返回成惰值状态,也仅能节省极少内存占用( 在本例中几乎可以忽略不计 )。

    1.3K10

    一段因 @State 注入机制所产生“灵异代码”

    如果不注释这行代码,fullScreenCover 中将显示 n = 2 ( 符合预期 )。这是什么?...State 注入优化机制在 SwiftUI 中,对于引用类型,开发者可以通过 @StateObject、@ObservedObject 或 @EnvironmentObject 将其注入到视图中。...stateTest_2023-02-22_16.44.55.2023-02-22 16_47_35通过观察加载视图 State 源数据,我们可以看到,State 包含一个 _wasRead 私有属性...即使为新上下文中视图进行关联操作视图求值操作之前完成,但由于 n 变化与关联操作被集中在一个 Render Loop 中,这样会导致在关联之后并不会强制新关联视图刷新( 关联后,值并没有发生变化...这是因为在 .fullScreenCover 构造方法中,我们传递 show projectedValue( Binding 类型 )由于合并操作原因,在 Sheet 视图关联到 n 后,并不会重新更新

    1.9K20

    @AppStorage研究

    在【健康笔记3】中,计划开放更多自定义选项给用户,简单算下来要有40-50项,在配置视图中更会将所有用到UserDefaults内容都注入进代码。...大量@AppStorage无法统一注入 @AppStorage基础指南 @AppStorageSwiftUI框架提供一个属性包装器,设计初衷创建一种在视图中保存和读取UserDefaults变量快捷方法...【健康笔记3】目前面临着前言中所描述情况,配置信息内容很多,如果单独注入会很麻烦。需要找到一种可以集中声明、一并注入方式。...除了数据转换导致性能损失外,另一个重要问题如果出现数据丢失情况,逐条保存方式还是可以保护绝大多数用户设定。...为了保证视图刷新机制,分别采用不同实现方式。 SwiftUI中即使一个不起眼环节也有不少乐趣值得我们探索。

    1.4K20

    onAppear 调用时机

    onAppear( task ) SwiftUI 开发者经常使用一个修饰符,但一直没有权威文档明确它闭包被调用时机。...本文将通过 SwiftUI 4 提供新 API ,证明 onAppear 调用时机在布局之后、渲染之前。问题同之前多篇博客类似,我们还是从 聊天室 一个 问题 开始。...在一个视图生存期中,SwiftUI 可能会多次创建视图实例。由于惰性视图优化机制,对于尚未处于可见区域视图SwiftUI 不会创建其实例求值一个被显示视图至少会经历一次过程。...由于 SwiftUI 视图实际上一个函数,SwiftUI 需要对视图进行求值( 调用 body 属性 )并保留计算结果。...newWords 为空,但也不会有问题完成布局调用 onAppear 闭包,给 newWords 赋值由于 newWords 视图 Source of truth ,发生改变后,导致视图重新刷新重复上面的过程

    2.1K20
    领券