当前位置: 首页 > news >正文

网站模板在线演示怎么做王也王志飞

网站模板在线演示怎么做,王也王志飞,网页开发的基本过程,分享类网站源码概览 我们已经知道,用 CoreData 在背后默默支持的 SwiftUI 视图在使用 @FetchRequest 来查询托管对象集合时,若查询结果中的托管对象在别处被改变将不会在 FetchedResults 中得到及时的刷新。 那么这一“囧境”在 SwiftData 里是否也会“卷土重来”呢?空说无益,就让我们在…

在这里插入图片描述

概览

我们已经知道,用 CoreData 在背后默默支持的 SwiftUI 视图在使用 @FetchRequest 来查询托管对象集合时,若查询结果中的托管对象在别处被改变将不会在 FetchedResults 中得到及时的刷新。

在这里插入图片描述

那么这一“囧境”在 SwiftData 里是否也会“卷土重来”呢?空说无益,就让我们在这里来一场钩深索隐、推本溯源的探究之旅吧。

在本篇博文中,您将学到如下内容:

  • 概览
  • 1. CoreData 托管对象多个实例的同步问题
  • 2. SwiftData 是否会重蹈覆辙?
  • 3. SwiftData 超简洁的解决方案
  • 总结

相信学完本课后,小伙伴们一定会惊叹在 SwiftData 模型对象多个实例间的同步竟如此之简单,简直不可思议!

无需等待,让我们马上开始同步大冒险吧!Let’s go!!!😉


1. CoreData 托管对象多个实例的同步问题

我们知道为了和 SwiftUI “亲密无间”,何曾几时(iOS 13.0+) CoreData 的托管类 NSManagedObject 也悄然遵守了 ObservableObject 协议。

在这里插入图片描述

从那一刻起,CoreData 托管对象便可以乖巧的作为 SwiftUI 视图中的状态“乐此不疲”。

在这里插入图片描述

不过,在 SwiftUI 视图 @FetchRequest 查询结果 FetchedResults 中的托管对象若在外部被修改,则该查询结果并不会自动进行同步:

@FetchRequest(sortDescriptors: [NSSortDescriptor(keyPath: \Cave.name, ascending: false)], predicate: NSPredicate(format: "challenge.stateValue = \(ChallengeState.inProgress.rawValue)"), animation: .bouncy) var inProcessingCaves: FetchedResults<Cave>

拿上面的 inProcessingCaves 状态来说,它包括了所有正在“进行中”的 Cave 托管对象(用 NSPredicate 来过滤数据),这些对象都会显示在主视图顶部“正在进行”的 Section 里:

在这里插入图片描述

如果我们在子视图里将 inProcessingCaves 中的任何对象状态由“进行中”改成了“已失败”,那么它们理应从“正在进行”的 Section 中“销声匿迹”,但实际情况却事与愿违:

在这里插入图片描述

如上图所示:红色的“已失败”Cave 托管对象仍在“厚颜无耻”的占据着“正在进行” Section 中的宝贵空间。


关于上面 CoreData 中 @FetchRequest 托管对象的过滤结果不能被及时刷新的解决之道,我们将会在后续博文中详述,小伙伴们敬请期待吧!


那么这种情况在最新的 SwiftData 中还会存在吗?让我们探寻一番吧。

2. SwiftData 是否会重蹈覆辙?

SwiftData 是苹果在 WWDC 23 推出的完全符合 Swift 范儿的数据库框架,其描述性的语法非常适合托管表本身、表字段以及表间关系的构建。


更多 SwiftData 相关内容的介绍,请小伙伴们尽情观赏如下链接中的精彩内容:

  • iOS 18 中全新 SwiftData 重装升级,其中一个功能保证你们“爱不释手”
  • SwiftData(iOS 17+)如何在数据新建和更新中途出错时恢复如初?
  • 『第十二章』数据持久化:SwiftData

为了模拟 CoreData 中的数据结构,我们分别创建了两个 SwiftData 数据模型:Item 和 SubItem,其中每个 Item 都至多包含一个 SubItem。

import SwiftData@Model
final class Item {@Attribute(.unique) var id: UUIDvar timestamp: Datevar name: String@Relationshipvar subItem: SubItem?init(timestamp: Date, name: String) {self.timestamp = timestampself.name = nameid = UUID()}static var sampleItems: [Item] = {var items = [Item]()let names = ["Apple", "Jujube", "Watermelon"]for name in names {let new = Item(timestamp: Date.now, name: name)let newSub = SubItem(timestamp: Date.now, name: "Sub \(name)", state: .unstarted)
http://www.yayakq.cn/news/357461/

相关文章:

  • 个人定制网站怎么做购物网站开发设计思路
  • 北京知名互联网公司排名青岛网站seo公司
  • 大型门户网站建设多少钱男女做爰网站
  • 通付盾 建设网站国内网站怎么做有效果
  • 成都市学校网站建设烟台网站改版
  • 网站改版 请示微信公众平台小程序怎么赚钱
  • 西数 网站建设wordpress被跳转
  • 响应式企业网站设计与实现培训网站官网
  • 网站设计制作费用多少国际财经新闻
  • 国内高校网站建设的调查信用网站建设原则
  • 网站建设的功能模型可以看小视频的浏览器
  • 网站可以自己维护吗华为商城官网
  • 北京网站建设的公司wordpress企业模板下载
  • 三合一 网站 前端云优化 网站建设
  • 东莞网站排名提升建设网站的网站安全
  • 做网站需要钱吗山东免费网络推广工具
  • 大兴网站建设福州网站建设优质服务商
  • 做团购的网站有哪些怎么把做的网页放网站
  • 网站制作方案包括哪些内容如何建设网站兴田德润简介
  • 怎么找回网站推广吧
  • 如何用iis做网站wordpress 免费注册
  • jsp做的婚恋网站网站建设 应该付多少维护费呢
  • 如何做好市场推广seo外包服务优化
  • 做仿网站公司申请建设活动中心网站
  • 网站漏洞如何做网站怎么赚钱吗
  • ai做网站步骤做招聘网站多少钱
  • 秦皇岛网站团队石景山做网站的公司
  • 网站首页成品建立网站数据库实验报告
  • 一个正规的网站建设公司做网站怎么带流量
  • 网站建设流程发布网站和网页制作WordPress个人主页404