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

对SwiftUI FetchRequest的更改是否未触发视图刷新?

SwiftUI FetchRequest的更改是否未触发视图刷新取决于FetchRequest的设计和使用方式。FetchRequest是用于在Core Data中获取数据的一种机制,它可以在视图层级中自动监测数据的变化并刷新视图。

FetchRequest包含了数据获取的规则和条件,当这些规则和条件发生改变时,FetchRequest会重新执行查询并获取新的数据。根据这个机制,当FetchRequest的更改导致数据查询结果发生变化时,SwiftUI会自动刷新相关的视图。

但是,有一些情况下,FetchRequest的更改可能不会直接导致视图刷新。其中一个情况是当FetchRequest使用的是非实时的NSFetchRequestResultType。在这种情况下,FetchRequest的更改不会触发视图刷新,需要手动调用视图的刷新机制。

另外,如果FetchRequest的更改没有在视图层级中正确传递和应用,也可能导致视图不刷新。在SwiftUI中,可以使用@FetchRequest属性包装器将FetchRequest与视图进行关联,这样在FetchRequest发生更改时,视图会自动刷新。确保正确使用@FetchRequest属性包装器,将FetchRequest正确传递给视图层级。

总结来说,SwiftUI FetchRequest的更改通常会触发视图的刷新,但需要注意FetchRequest的设计和使用方式,以及正确传递和应用FetchRequest的变化。在视图层级中正确使用@FetchRequest属性包装器是实现自动视图刷新的关键。

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

相关·内容

SwiftUI 与 Core Data —— 数据获取

本文中我们将探讨在 SwiftUI 视图中批量获取 Core Data 数据方式,并尝试创建一个可以使用 mock 数据 FetchRequest。...FetchRequest 获取 )由于 TCA Reducer 无法与视图存续期自动绑定,上面的可感知延迟在每次触发 onAppear 时都将出现最终,我决定放下心结,仍然采用在视图中使用类似...)中属性是否符合 DynamicProperty ,都将被重建。...,避免引发视图不必要更新通过创建一个具有包装用途引用类型来持有需要修改数据( 在 @State 中持有引用 ),便可以达成如下目的:1、让数据生命周期与视图生存期一致;2、数据可更改;3、更改数据不会引发视图更新...] 数据进行比较,避免不必要视图刷新

4.6K30
  • 优化在 SwiftUI List 中显示大数据集响应效率

    本文将通过一个优化列表视图案例,展现在 SwiftUI 中查找问题、解决问题思路,其中也会对 SwiftUI 视图显式标识、@FetchRequest 动态设置、List 运作机制等内容有所涉及...它会根据指定 NSFetchReqeust ,自动响应数据变化并刷新视图。...列表视图初始化和 body 求值 如果 SwiftUI NavigationView 有一定了解的话,应该知道 SwiftUI 会对 NavigationLink 目标视图进行预实例化(但不会对...在 SwiftUI 视图生命周期研究[3] 一文中,我 List 如何对子视图显示进行优化做了一定介绍。...除非没有其他选择,否则我并不推荐大家 UIKit ( AppKit ) 控件进行重新包装,应使用尽可能微小侵入方式 SwiftUI 原生控件进行补充和完善。

    9.1K20

    ObservableObject研究

    of Truth)开发模式,ObservableObject是否为最佳选择。...通知与其已建立依赖关系View进行刷新•View发送Action -> Recudcer(State,Action) -> newState 周而复始•由于SwiftUI双向绑定机制,数据流并非完全单向...•在部分视图中可以结合SwiftUI通过其他包装属性如@FetchRequest等将状态局部化 后两项是利用SwiftUI特性,也可以不采用,完全采用单向数据流方式 基于以上方法,在SwiftUI...在SwiftUI下开发,无论是主观还是客观都需要你将View表述精细化,用更多子View来组成你最终视图,而不是把所有的代码都尽量写在同一个View上。...•在当前View使用SwiftUI提供其他包装属性我现在最常使用SwiftUI其他包装属性就属@FetchRequest了。

    2.4K60

    只在视图 Body 中生存变量

    SwiftUI 通过调用视图实例 body 属性来获取视图值。...不过就和通过 let _ = print("update") 能够帮助我们了解视图动态一样,掌握了在 body 中通过 var 创建变量及应用方法,也将有助于开发者更好地理解 SwiftUI 视图求值逻辑并掌握其时机...为什么和想象不一样!起始点不是 0 ? 同我们不要去推断在一个视图存续期内,SwiftUI 会创建多少个该视图实例一样,我们也不应假设,在渲染第一行数据之前,body 没有被调用过。...在 SwiftUI 所有的惰性容器中,都会出现计算两次情况( 或许与惰性容器视图值保存机制有关 ),这就要求我们为了得到正确 offset 值必须进行除 2 操作。...@State + onAppear 也能实现类似的效果,不过会让视图刷新一次。如果计算时间真的较长( 会导致视图停滞 ),通过在 task 中使用异步方法才是更好选择。

    68110

    SwiftUI属性包装器如何处理结构体

    已经了解了 SwiftUI 如何通过使用 @State 属性包装器将变化数据存储在结构体中,如何使用 $ 将状态绑定到UI控件值,以及更改 @state 包装属性时是如何自动让 SwiftUI 重新调用我们结构体...,但是您不会看到我们 print() 语句被触发——实际上,什么都不会输出。...为了了解这里发生事情,我希望您考虑一下我们在使用 Core Data 时:我们使用 @FetchRequest 属性包装器查询我们数据,但我还向您展示了如何直接使用 FetchRequest 结构体...之前我曾解释说,我们无法在视图中修改属性,因为它们是结构体,因此是固定。但是,现在您知道 @State 本身会生成一个结构体,因此我们面临一个难题:如何修改该结构体?...您将进入 SwiftUI 生成界面,该界面实质上是 SwiftUI 向我们展示所有的部分。那里没有实现代码,只有协议,结构体,修饰符等许多定义。

    1.7K10

    Ask Apple 2022 中与 Core Data 有关问答

    是否可以显示同步进度并手动触发同步Q:使用 NSPersistentCloudKitContainer 时,是否可以确定当前同步状态或手动触发同步?...A:在 SwiftUI 中使用 CoreData 没有问题。您可以通过 @FetchRequest[8] 从存储中获取检索结果。@FetchRequest 是个让人又爱又恨东西。...动态修改 @FetchRequest 配置Q:在 SwiftUI 应用程序中,如何基于 @AppStorage 值创建 @FetchRequest?...A:@FetchRequest 谓词属性是一个 Binding,它会在更改时重绘视图。从 Swift 3.0 开始,FetchRequest 支持在视图中动态修改它谓词和排序描述。...如果我们不再关心本地数据,是否可以从与 CloudKit 同步数据模型中删除使用实体?

    2.8K20

    Ask Apple 2022 中与 Core Data 有关问答 (下)

    该方法 Persistent History 部分有助于确保你不会大量重复地从数据库中获取数据,并且仅在你需要数据发生更改时才刷新。又是一个有关持久化历史跟踪问题。...@FetchRequest 性能如何Q:@FetchRequest 在性能方面是否优于在 ViewModel 构造方法中通过 fetchRequest 获取数据方式?...还是只使用一个 fetchRequest,然后将数据保存在本地,并通过上述方法访问它( 应该是指第一种方式 )?我想知道这里最佳做法是什么。谢谢!A:一般来说,不同视图经常使用不同获取请求。...改成 String;2、声明一个非可选值计算属性,并在其中可选值属性值进行处理;3、将托管对象实例整体转换成对 SwiftUI 视图更加友好值类型。...筛选关系数据Q:我发现在 SwiftUI 中使用 @FetchRequest 是将用户界面与 Core Data 数据绑定很好手段。然而,在使用关系来获得同样无缝绑定时,我碰到了一个小问题。

    3.2K20

    如何在Xcode下预览含有Core Data元素SwiftUI视图

    预览在Xcode中工作原理同标准模拟器十分接近。但为了让它可以即时响应SwiftUI视图变化,苹果其做出了不少修改。...对于当前视图环境注入,必须在其祖先视图中完成。 如果视图中声明了某个环境数据依赖,而忘记在其祖先视图中注入,并不会导致编译错误。应用程序在运行至该视图时会直接崩溃。...在某些情况下,即使感觉上预览是正常(实际上数据没有刷新),通过切换到动态模式也会强制Core Data数据刷新。...批量创建数据有利于用于使用了@FetchRequest视图在预览中调用。...只要始终保持用心、耐心、平常心,再加上一点点运气,总会找到解决问题方法。 希望本文你在SwiftUI中使用Core Data有所帮助。

    5.1K10

    如何结合 Core Data 和 SwiftUI

    当您创建 Xcode 项目时,我要求您选中 Use Core Data 框,它应该导致项目的更改: 现在,您有了一个名为 Bookworm.xcdatamodeld 文件。...设置核心数据需要两个步骤:创建所谓持久性容器(从容器存储中加载并保存实际数据),然后将其注入 SwiftUI 环境中,以便我们所有的视图都可以访问它。 Xcode 模板已经为我们完成了这两个步骤。...使用获取请求从 Core Data 中检索信息——我们描述了我们想要内容,应如何其进行排序以及是否应使用任何过滤器,然后 Core Data 会发回所有匹配数据。...这次将其称为@FetchRequest,它带有两个参数:我们要查询实体以及我们希望结果如何排序。...更好是,它已经将其添加到 SwiftUI 环境中,这就是@FetchRequest属性包装器起作用原因——它使用了环境中可用任何托管对象上下文。

    11.8K30

    架构之路 (七) —— iOS AppSOLID原则(一)

    Open-Closed 软件实体,包括类、模块和函数,应该扩展开放,修改关闭。 这意味着您应该能够扩展您类型功能,而无需大幅更改它们以添加您需要内容。 3....对于 SwiftUI 预览,您将始终显示日常开支。 只需更改数据源类型,您就可以使视图更加通用。 这显示了这两个文件中有多少代码重复。 现在,即使您创建了一般视图,您仍然没有在任何地方使用它。...SwiftUI 列表具有用于两种报告类型两个硬编码 NavigationLink 视图。 如果要添加新类型报告,例如 每周报告,您必须在此处和 ReportRange中更改代码。 这是低效。...通过将行 saveEntry(更改为下面以消除最后警告: _ = saveEntry( 这会丢弃使用返回值。 ---- Auditing the App Again 再看看你应用程序。...无论您是否了解基本 iOS 设计模式,刷新您对它们内存总是好。 我们 Fundamental iOS Design Patterns tutorial 可以提供帮助。

    4.7K10

    SwiftUI 与 Core Data —— 安全地响应数据

    其进行强制解包?事实上,在 Xcode 自带 Core Data 模版中,就是这样使用。image-20221212101526366但这确实是正确使用方式吗?是否会有严重安全隐患?...随着 FetchRequest 内容发生变化,List 将重新刷新,由于 NavigationLink 对应数据不复存在,因此 NavigationView 自动返回了根视图。...此时受 item ObjectWillChangePublisher 驱动,Cell 视图刷新,强制解包将导致应用崩溃。只需采用提供备选值方式,即可避免上述问题出现。...任何可能脱离视图传递过程都应使用托管对象实例对应值类型版本。在更改数据时进行二次确认为了避免主线程造成过多影响,我们通常会在私有上下文中进行会对数据产生变化操作。...将操作方法参数设置为值类型,将迫使开发者在对数据进行操作时( 添加、删除、更改等 )首先需要确认对应数据( 数据库中 )是否存在。

    3.3K20

    SwiftUI-数据流

    SwiftUI界面是严格数据驱动:运行时界面的修改,只能通过修改数据来间接完成,而不是直接界面进行修改操作。...UI刷新,所以很适合值类型,因为值类型里面属性更新,也会触发整个值类型重新设置。...不过值类型在传递时会发生复制操作,所以给传递后值类型即使属性更新了也不会触发最初传过来值类型重新赋值,所以界面并不会刷新,此时需要用@Binding,因为它可以将值类型转为引用类型,这样在传递时...,属性观察器就会调用,告诉objectWillChange发布者发布有关我们数据已更改消息,以便所有订阅视图都可以刷新消息 var name = "" { willSet...数据流图 从上图可以看出SwiftUI 数据流转过程: 用户界面进行操作,产生一个操作行为 action 该行为触发数据状态改变 数据状态变化会触发视图重绘 SwiftUI 内部按需更新视图

    10.1K20

    掌握 Transaction,实现 SwiftUI 动画精准控制

    同时,在 SwiftUI 动画系统中,有关 Transaction 解释很少,无论是官方资料还是第三方文章,都没有其运作机制进行系统阐述。...每当状态发生变化时,SwiftUI 会根据是否由“显式动画”发起或是否有声明”隐式动画”等情况按需生成新 transaction,并在需要视图层次中进行传递。...它会在当前视图链发生变化时创建 transaction,而不关心该变化是否由特定关联值所导致。...开发者终于可以用纯 SwiftUI 方式来决定是否在这些组件切换过程中使用动画了。...开发者应根据需要选择是否采用其内置动画设置。 例如,对于 FetchRequest,我们可以通过三种方式来控制其在数据增加或删除时是否采用动画效果。

    47320

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

    @State允许我们绕过结构体限制:我们知道不能更改它们属性,因为结构是固定,但是@State允许SwiftUI将该值单独存储在可以修改地方。...但是相信我,这是值得:随着你进步,你会了解到SwiftUI经常破坏和重新创建你结构体,所以保持它们小而简单结构性能很重要。...提示:在SwiftUI中存储程序状态有几种方法,您将学习所有这些方法。@State是专门为存储在一个视图简单属性而设计。...因为SwiftUI更新数据前提是触发 第一层 绑定对象 wrapperModel下属性(字段)发生更新才会调用视图层更新数据 但是 第一次下绑定对象还绑定了 @ObservedObject 或者其他类型对象呢.../// 可以直接 调用包装类 notifyUpdate() 方法更新当前对象属性,来达到更新View 效果 /// 顾忌:如果多次调用 notifyUpdate() View会刷新两边吗 /// 答案是否

    3.1K10

    SwiftUI 动画进阶 — Part4:TimelineView

    前言 前三篇高级 SwiftUI 动画系列是作者在 WWDC 2021 之前实战总结内容。 2021 年 WWDC 介绍 TimelineView 和 Canvas 感到激动。...为了解决这个问题,我们更改了 SubView 视图以添加一个参数,该参数将随着时间轴每次更新而改变。请注意,我们不需要使用参数,它只需要在那里。尽管如此,我们将看到这个使用值稍后会非常有用。...bellCounter: 记录节拍数量,以确定是否应该听到节拍或铃声。 该示例使用 .animation(_:value:) 修饰语。此版本修改器,在指定值更改时应用动画。...在这种类型动画中,我们在时间上间隔了关键点,这非常好。 在这些时间点太靠近动画中,你可能需要/想要避免这种情况。如果你需要更改存储值,但要避免视图刷新……你可以使用一个技巧。...稍后在你视图中,你将根据动画类型创建动画值,但使用偏移值持续时间其进行实例化。

    3.8K30

    SwiftUI 与 Core Data —— 数据定义

    无需更改代码便可以适应不同框架( 纯 SwiftUI 驱动、TCA 或其他 Redux 框架 )所有的视图均可以实现在不使用任何 Core Data 代码情况下进行预览,并可对 Mock 数据进行动态响应...元素 SwiftUI 视图[4])。...协议,当数据发生变化时,可以通知视图进行刷新因此无论如何,我们都应该在视图中保留托管对象上述优点,如此,上面的代码将会演变成下面的模样:struct GroupCellViewRoot:View {...为了保留 Core Data 优势,我们不得不在视图中引入托管对象,引入了托管对象就不得不先建模,再转换。是否可以创建一种既可保留托管对象优势同时又不用在代码中显式引入特定托管对象方式呢?...如果仅为达成此目的,直接 GroupCellView 视图进行预览就好了,为什么要如此大费周章?

    2.4K40

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

    本文将通过一个演示 App 进行逐步内存优化方式( 由原先显示 100 条数据要占用 1.6 GB 内存,优化至显示数百条数据仅需 200 多 MB 内存 ),让读者 SwiftUI 视图存续期...SwiftUI 惰性视图容器拥有符合 DynamicViewContent 协议内容( 通过 ForEach 生成内容 )进行优化能力。...我们可以通过在 onAppear 以及 onDisappear 中图片显示与否( 变量 show )进行控制( 迫使 SwiftUI视图 body 重新求值 ),从而减少因上述原因所增加内存占用...同优化过代码一样,随着数据量增大,内存占用也将随之提高。在 400 条记录情况下,滚动到底部,内存占用值差不多是 1.75 GB。...总结 SwiftUI 惰性容器使用起来很方便,并且通过 @FetchRequest 与 Core Data 配合也很方便,这在一定程度上导致开发者有了轻视心理,认为 SwiftUI + Core Data

    2.4K40

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

    本文将通过一个演示 App 进行逐步内存优化方式( 由原先显示 100 条数据要占用 1.6 GB 内存,优化至显示数百条数据仅需 200 多 MB 内存 ),让读者 SwiftUI 视图存续期...SwiftUI 惰性视图容器拥有符合 DynamicViewContent 协议内容( 通过 ForEach 生成内容 )进行优化能力。...我们可以通过在 onAppear 以及 onDisappear 中图片显示与否( 变量 show )进行控制( 迫使 SwiftUI视图 body 重新求值 ),从而减少因上述原因所增加内存占用...同优化过代码一样,随着数据量增大,内存占用也将随之提高。在 400 条记录情况下,滚动到底部,内存占用值差不多是 1.75 GB。...总结 SwiftUI 惰性容器使用起来很方便,并且通过 @FetchRequest 与 Core Data 配合也很方便,这在一定程度上导致开发者有了轻视心理,认为 SwiftUI + Core Data

    1.3K10
    领券