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

将FetchRequest项移动到自己的视图结构后,SwiftUI停止显示列表更新

在SwiftUI中,当将FetchRequest项移动到自己的视图结构后,可能会导致列表不再更新的问题。这是因为SwiftUI的视图更新是基于数据的变化来触发的,而FetchRequest项的变化并不会直接触发视图的更新。

为了解决这个问题,可以使用@FetchRequest属性包装器来确保FetchRequest项的变化能够正确地触发视图的更新。@FetchRequest属性包装器是SwiftUI提供的一种用于管理Core Data中的数据请求的机制。

首先,确保你的视图结构中使用了@FetchRequest属性包装器来管理你的FetchRequest项。例如:

代码语言:txt
复制
struct ContentView: View {
    @FetchRequest(entity: YourEntity.entity(), sortDescriptors: [], predicate: nil)
    var items: FetchedResults<YourEntity>

    var body: some View {
        List(items, id: \.self) { item in
            Text(item.name)
        }
    }
}

在上面的代码中,@FetchRequest属性包装器会自动监测FetchRequest项的变化,并在数据发生变化时更新视图。

另外,如果你在FetchRequest项中使用了谓词(predicate)来过滤数据,确保在谓词中使用@FetchRequest属性包装器中的\.self来引用实体对象本身。这样可以确保谓词的变化也能正确地触发视图的更新。

至于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,我无法给出具体的推荐。但你可以参考腾讯云的官方文档和产品介绍页面,寻找与云计算相关的产品和服务,以满足你的需求。

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

相关·内容

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

本文通过一个优化列表视图案例,展现在 SwiftUI 中查找问题、解决问题思路,其中也会对 SwiftUI 视图显式标识、@FetchRequest 动态设置、List 运作机制等内容有所涉及...,进入列表滚动流畅且可无延迟响应滚动到列表底部或顶部指令。...按照正常逻辑,当进入列表视图 ListEachRowHasID List 只应该实例化十几个 ItemRow 子视图 ( 按屏幕显示需要 ),即便使用 scrollTo 滚动到列表底部,List...我们通过 SwiftUI-Introspect[7] 来实现在 List 中滚动到列表两端。...获取若干最新数据,数据逆向添加入数组 在列表显示率先移动到最底端(取消动画) 通过 refreshable 调用下一批数据,并继续逆向添加入数组 用类似的思路,还可以实现向下增量读取或者两端增量读取

9.2K20

SwiftUI 与 Core Data —— 数据获取

本文中我们探讨在 SwiftUI 视图中批量获取 Core Data 数据方式,并尝试创建一个可以使用 mock 数据 FetchRequest。...而 @FetchRequest app 中状态构成中很大一部分从独立结构实例中分拆出来,散落在多个视图之中。这几年不少开发者也尝试找寻更加符合 Redux 精神替换方案,但效果都不理解。...这将有两个作用:数据变化引发与其绑定视图进行更新由于底层数据并不保存在视图中,因此在视图存续期中 SwiftUI 可以随时创建新视图描述实例而无需担心数据丢失虽然苹果没有公开 _makeProperty...类型中可引发视图更新数据发生变化调用该方法。...这是由于一旦 SwiftUI 惰性容器中出现了多个 ForEach ,惰性容器丧失对子视图优化能力。任何数据变动,惰性容器都将对所有的子视图进行更新而不是仅更新可见部分视图

4.6K30
  • WWDC 23 ,SwiftUI 5 和 SwiftData 初印象

    苹果不仅带来了全新形态硬件产品,还推出了几个相当震撼新框架。本文聊聊我对本届 WWDC 中 SwiftUI 5.0 和 SwiftData 初步印象。...这从根本上解决了当前影响 SwiftUI 应用( 过渡计算 )效率问题。让开发者可以更加自由来设计数据结构以及随心所欲注入数据源。 不过很遗憾,这项新特性只能在 SwiftUI 5 上实现。...大幅改善了 ScrollView 控制力 本次升级中,为 ScrollView 带来了新动态滚动定位系统( 不依赖 ScrollViewReader 和显式 id 声明)、一次性定位系统( 在视图进入...,直接定位到滚动视图特定位置,只能使用一次 )、全新滚动条控制( 闪烁 )、可自定义行视图在滚动区域顶端和显示区域显示状态( 例如可用其实现类似 watchOS 中动到顶端子视图缩小视觉效果...性质与通过宏创建 Observed 状态类似,可直接驱动视图更新(传递时无需使用属性包装器) Attribute 派生选项被废弃了 可以在 Xcode 中使用 Model Editor Model

    38510

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

    本文通过对一个演示 App 进行逐步内存优化方式( 由原先显示 100 条数据要占用 1.6 GB 内存,优化至显示数百条数据仅需 200 多 MB 内存 ),让读者对 SwiftUI 视图存续期...运行显示状态如下: 图片 Add 100 按钮创建 100 条记录, 记录数 为当前数据条数,内存占用 为当前 App 内存占用情况。...尽管从表面上来看,惰性容器仅会在视图进入可视区域时才会对其进行操作,但一旦该视图显示过( body 被求过值 ),即使该视图离开可视区域,SwiftUI 仍会保存视图 body 值。...滚动到底部( 100 条数据 ),内存占用将在 500 MB 左右。...数据多份拷贝 当图片数据从 SQLite 经 Core Data 最终通过 SwiftUI 显示时,实际上在内存中至少保存了三份拷贝: 行缓存 托管对象上下文( 托管对象被填充显示该图片 SwiftUI

    2.4K40

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

    本文通过对一个演示 App 进行逐步内存优化方式( 由原先显示 100 条数据要占用 1.6 GB 内存,优化至显示数百条数据仅需 200 多 MB 内存 ),让读者对 SwiftUI 视图存续期...尽管从表面上来看,惰性容器仅会在视图进入可视区域时才会对其进行操作,但一旦该视图显示过( body 被求过值 ),即使该视图离开可视区域,SwiftUI 仍会保存视图 body 值。...滚动到底部( 100 条数据 ),内存占用将在 500 MB 左右。...数据多份拷贝 当图片数据从 SQLite 经 Core Data 最终通过 SwiftUI 显示时,实际上在内存中至少保存了三份拷贝: 行缓存 托管对象上下文( 托管对象被填充显示该图片 SwiftUI...总结 SwiftUI 惰性容器使用起来很方便,并且通过 @FetchRequest 与 Core Data 配合也很方便,这在一定程度上导致开发者有了轻视心理,认为 SwiftUI + Core Data

    1.3K10

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

    这是应用程序中第一个视图,您可以在其中选择要显示费用报告类型:每日或每月。 假设您想添加本周报告。...你需要内存存储来在 SwiftUI 预览中显示虚假数据。...对于 SwiftUI 预览,您将始终显示日常开支。 只需更改数据源类型,您就可以使视图更加通用。 这显示了这两个文件中有多少代码重复。 现在,即使您创建了一般视图,您仍然没有在任何地方使用它。...SwiftUI 列表具有用于两种报告类型两个硬编码 NavigationLink 视图。 如果要添加新类型报告,例如 每周报告,您必须在此处和 ReportRange中更改代码。 这是低效。...这是一个相当复杂努力,只是为了显示一些属性。 现在,视图依赖于一个抽象协议,您可以使用 Core Data 模型或简单结构来实现它。

    4.7K10

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

    可以在预览视图中看到对应UUID目录名(必须在动态预览模式下才会显示)。 image-20210827150544279 通过清空对应目录,即可完成上面的1、4、5。...SwiftUI预设了大量同系统有关环境值,通过设置或响应这些数据,我们可以修改系统配置或读取系统信息。 SwiftUI视图采用树状结构组织,在任意节点视图上注入环境数据都将影响该节点所有子视图。...需求发送给Store,数据经过处理和加工再提交给State,视图往往使用并非Core Data框架产生原生数据(比如说托管对象)。 @FetchRequest是个例外。...可以预览但是有错误提示 有时含有Core Data元素视图在预览时会出现如下错误提示: image-20210827191644251 预览切换到动态模式通常就可以正常显示。...SwiftUI通常采用Redux开发模式,通过获取到Core Data数据转换成标准Swift结构从而避免在视图中使用托管对象上下文或托管对象。

    5.1K10

    WWDC 23 ,SwiftUI 5 和 SwiftData 初印象

    苹果不仅带来了全新形态硬件产品,还推出了几个相当震撼新框架。本文聊聊我对本届 WWDC 中 SwiftUI 5.0 和 SwiftData 初步印象。...这从根本上解决了当前影响 SwiftUI 应用( 过渡计算 )效率问题。让开发者可以更加自由来设计数据结构以及随心所欲注入数据源。 不过很遗憾,这项新特性只能在 SwiftUI 5 上实现。...大幅改善了 ScrollView 控制力 本次升级中,为 ScrollView 带来了新动态滚动定位系统( 不依赖 ScrollViewReader 和显式 id 声明)、一次性定位系统( 在视图进入...,直接定位到滚动视图特定位置,只能使用一次 )、全新滚动条控制( 闪烁 )、可自定义行视图在滚动区域顶端和显示区域显示状态( 例如可用其实现类似 watchOS 中动到顶端子视图缩小视觉效果...性质与通过宏创建 Observed 状态类似,可直接驱动视图更新(传递时无需使用属性包装器) Attribute 派生选项被废弃了 可以在 Xcode 中使用 Model Editor Model

    1.1K20

    只在视图 Body 中生存变量

    SwiftUI 通过调用视图实例 body 属性来获取视图值。...但很少有人会在 body 中去使用 var 来定义变量,因为实在找不到使用 var 理由和意义。本文探讨在 SwiftUI 视图 body 中用 var 来创建变量意义和可能场景。...为什么和想象不一样!起始点不是 0 ? 同我们不要去推断在一个视图存续期内,SwiftUI 会创建多少个该视图实例一样,我们也不应假设,在渲染第一行数据之前,body 没有被调用过。...在数据变化时(包括首次提取数据),FetchRequest 会根据数据量向视图发送更新信号(可通过 onRecevie 来验证) 虽然不能假设,但我们可以通过下面的方法,让 offset 数据,在首行获得重置...,获得更多性能优势。

    68810

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

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

    1.7K10

    Ask Apple 2022 中与 Core Data 有关问答

    例如,从符合 Transferable 结构中共享 URL 实例根本不起作用。 ShareLink 只是显示一个空弹出窗口( 另一个开发者吐槽 )。...您可以根据需要将通知侦听器绑定到事件以更新显示状态。无法主动触发同步。...动态修改 @FetchRequest 配置Q:在 SwiftUI 应用程序中,如何基于 @AppStorage 值创建 @FetchRequest?...如果我可以创建一个带有与此 @AppStorage 值相关联谓词 @FetchRequest,则谓词将自动更新,并更新视图。目前我无法做到这一点,哪种解决方法能获得类似的结果?...A:@FetchRequest 谓词属性是一个 Binding,它会在更改时重绘视图。从 Swift 3.0 开始,FetchRequest 支持在视图中动态修改它谓词和排序描述。

    2.9K20

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

    A:在初始数据获取完成,@FetchRequest 成本与结果变化多少有关,而手动重新获取成本与结果总数有关。...@FetchRequest 包装了一个 NSFetchedResultsController,它没有自己特殊逻辑。获取数据方式Q:我想知道哪种是比较好方式?...还是只使用一个 fetchRequest,然后数据保存在本地,并通过上述方法访问它( 应该是指第一种方式 )?我想知道这里最佳做法是什么。谢谢!A:一般来说,不同视图经常使用不同获取请求。...改成 String;2、声明一个非可选值计算属性,并在其中对可选值属性值进行处理;3、托管对象实例整体转换成对 SwiftUI 视图更加友好值类型。...我数据模型中有一个 Int16 类型 userOrder 属性,在表视图行被重新排序,有什么好方法来保存数据新顺序?

    3.2K20

    AVKit框架详细解析(四) —— 基于AVKit 和 AVFoundation框架视频流App构建

    当您想对事物工作方式进行非常具体控制时,最好编写自己视频视图。 让事情顺利进行是你工作。...2) 您使用初始值设定创建 LoopingPlayerUIView 新实例并返回新实例。 3) SwiftUI 在需要更新底层 UIView 时会调用此方法。 现在,将其留空。...由于您将从该结构体外部控制播放,因此您可以从 LoopingPlayerUIView 初始值设定中删除这两行: player?.volume = 0.0 player?....视图修饰符,并在 On Dismiss Closure 注释添加以下内容: embeddedVideoRate = 1.0 当系统不再需要播放器对象时,您还可以停止播放视频并从播放器对象中删除所有项目...缺点是,在撰写本文时,iOS 14.5是可用最新版本,VideoPlayer SwiftUI 视图显示画中画按钮。

    7K10

    Ask Apple 2022 与 SwiftUI 有关问答(下)

    在更复杂 UI 中,由于视图更新速度过快,性能( 至少在 macOS 上 )迅速下降。A:有不同策略。ObservableObject 是使视图视图层次结构失效( 引发重新计算 )单元。...视图性能优化是一个系统工程,在对其运作机制、注入原理、更新时机等方面有了综合认识,可以更好地做出有针对性解决方案。...但是,如果你只是自己使用它,并且条件可控,那么不处理这些情况也是合理。创建一个考虑到所有情况通用布局( 例如:VStack、HStack )是一相当艰巨工作。...Swiftcord[12] 代码展示了如何在 SwiftUI 下实现倒置列表。阅读 优化在 SwiftUI List 中显示大数据集响应效率[13] 一文,了解苹果工程师推荐方法。...视图功能分散到函数、更小视图结构以及视图修饰器当中是很好解决方法。

    14.8K30

    老人新兵 —— 一款 iOS APP 开发手记

    SwiftUI 给我创建了一个非常高效环境,在短时间内便可以整个 app 原型跑起来,但当真正地具体实现以及数据流完全串联起来时才发现一切并不那么简单。...我 app 中有几处 Sheet 弹出响应就比较慢( view 移出 sheet,使用 NavigationLink 调用显示就很好 ),尤其是退出时响应更慢。...@FetchRequest 对数据动态管理非常好,在 SwiftUI 中数据任何变化都能动态体现。...@FetchRequest 目前只能在 init 中通过参数动态设置一次( 无法动态修改 ),如果需要显示不同谓词或排序结果,只能通过上层视图重新设置。...唯一就是苹果在购买完成最初完成反馈其实并不能保证用户已经付款,所以需要在后台查询确保已付款成功。退款等也不会有提示,反正定期更新收据就行了。

    2.5K40

    如何结合 Core Data 和 SwiftUI

    设置核心数据需要两个步骤:创建所谓持久性容器(从容器存储中加载并保存实际数据),然后将其注入 SwiftUI 环境中,以便我们所有的视图都可以访问它。 Xcode 模板已经为我们完成了这两个步骤。...这次将其称为@FetchRequest,它带有两个参数:我们要查询实体以及我们希望结果如何排序。...您可以根据需要运行代码,但没有太多意义——该列表将为空,因为我们尚未添加任何数据,因此我们数据库为空。...更好是,它已经将其添加到 SwiftUI 环境中,这就是@FetchRequest属性包装器起作用原因——它使用了环境中可用任何托管对象上下文。...现在,有趣部分是:我们将使用为我们生成 Core Data 类创建一个 Student对象。这需要附加到托管对象上下文中,以便对象知道应将其存储在何处。然后,我们可以像通常为结构体那样分配值。

    11.8K30

    AnyView 对 SwiftUI 性能影响

    前言AnyView 是一种类型擦除视图,对于 SwiftUI 容器中包含异构视图非常方便。在这些情况下,你不需要指定视图层次结构中所有视图具体类型。...如果是 AnyView(基本上是一个包装类型),SwiftUI 很难确定视图身份和结构,并且它将重新绘制整个视图,这并不是真正高效。...在本文中,我将使用 Stream SwiftUI 聊天 SDK 进行一些测量,使用其默认基于泛型实现,并将其与使用 AnyView 修改实现进行比较。...没有 AnyView在没有 AnyView 包装器情况下进行测试产生了与常规滚动测试相似的结果(58-59 FPS)。这也是预期,因为 SwiftUI 知道视图标识和结构。...其中一些视图相当昂贵(例如 GIF),因此重新绘制可能是一相当昂贵操作。通过使用 AnyView,效果类似于 id 修饰符值设置为 UUID() - 这将在发生更改时始终更新视图项目。

    14200
    领券