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

衡水做网站哪儿好杭州seo

衡水做网站哪儿好,杭州seo,国家企业年报网上申报系统,2017网站建设价目表概览 我们已经知道,用 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.ds6.com.cn/news/26357.html

相关文章:

  • 做网站记什么科目网络推广推广
  • 做网站卖袜子效益如何网站推广代理
  • 电脑网站做名片网络教学平台
  • 专业瓷砖美缝网站怎么做免费b2b网站推广
  • 做网站推广销售怎么样长沙网站优化推广
  • 望京做网站的公司哪家好优化问题
  • 网站设计命名规范搜索图片
  • 怎么做网站赌博今天发生的新闻
  • 钦州市住房和城乡建设委员会网站网络推广员的工作内容
  • 微信小程序怎么做商城郑州网站优化seo
  • 门户网站开发要求产品互联网推广
  • 营销策划的概念关键词seo排名
  • 重庆网站建设公司费用智能网站推广优化
  • 做自媒体的网站名字免费二级域名平台
  • 德阳市建设局网站能打开任何网站浏览器
  • 网站建设经费预算包括哪些营销比较成功的品牌
  • 淘宝怎么做网站专业培训心得体会
  • 上海注册公司在哪个网站网络品牌营销
  • 安徽省建设行业质量与安全协会网站seo营销名词解释
  • 网站开发软件 d直通车怎么开才有效果
  • 长沙个人做网站杭州谷歌seo公司
  • 网站建设 广州长沙网站搭建优化
  • 百度竞价网站源码0元入驻的电商平台
  • 简易网站开发网络seo培训
  • 闵行交大网站建设企业网站的推广方法有哪些
  • 网站建设日程表格bt磁力搜索引擎索引
  • 百度推广怎么做网站新闻头条今日要闻国内
  • 网站建设中高低端区别如何优化seo
  • 建设网站用什么空间服务器广告投放是做什么的
  • 大连网站制作案例seo搜外