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

如何结合 Core Data 和 SwiftUI

尽管时间相距遥远,Apple 还是投入了大量工作以确保这两种强大技术能够完美地相互配合使用,这意味着 Core Data 就像始终以这种方式设计一样,已集成到 SwiftUI 中。...设置核心数据需要两个步骤:创建所谓持久性容器(从容器存储中加载并保存实际数据),然后将其注入 SwiftUI 环境中,以便我们所有的视图都可以访问它。 Xcode 模板已经为我们完成了这两个步骤。...我们需要确保该获取请求随着时间推移保持最新,以便在创建或删除学生,我们 UI 保持同步。 SwiftUI 有一个解决方案,而且——您猜对了——这是另一个属性包装器。...为了解决这个问题,我们将在列表下方创建一个按钮,每次点击都会添加一个新随机学生,但是首先我们需要一个新属性来存储托管对象上下文。 让我重申一下,因为这很重要。...更好是,它已经将其添加到 SwiftUI 环境中,这就是@FetchRequest属性包装器起作用原因——它使用了环境中可用任何托管对象上下文。

11.8K30
您找到你想要的搜索结果了吗?
是的
没有找到

SwiftUI-数据流

用@State修饰属性,只要属性改变,SwiftUI 内部会自动重新计算 Viewbody部分,构建出View Tree,由于 View 都是结构体,SwiftUI 每次构建这个 View Tree...@Binding 主要有两个作用: 在不持有数据源情况下,任意读取。 从 @State 中获取数据应用,并保持同步。...objectWillChange send方法,刷新页面,SwiftUI 已经默认帮我实现好了,但也可以自己手动出发这发这个行为。...组件层级嵌套太深,就会出现数据逐层传递问题, @EnvironmentObject可以帮助组件快速访问全局数据,避免不必要组件数据传递问题。...使用@EnvironmentObject,SwiftUI 将立即在环境中搜索正确类型对象。如果找不到这样对象,则应用程序将立即崩溃。

10K20

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

对于苹果工程师给予建议有一点请注意,那就是如果有在父视图中修改该环境对象实例需求,须确保父视图不会被反复重构( SwiftUI 重新创建视图类型实例 )。...A:谢谢你问题。这在目前是不可能,但也是我们感兴趣事情。估计苹果工程师比较忙,没有认真考虑这个问题。...另外,用 UIKit 实现同样功能视图,它没有任何性能问题。...WindowGroup 和 OpenWindowActionQ:在 macOS 上是否可以在创建新窗口附加参数?我在同一个子上下文中创建一个新托管对象,并希望将这个对象发送到一个新窗口。...从父视图通过环境值进行传递应该可以满足提问者当前需求:父视图可以传入新值,当前视图也可以在视图范围内改变该值。总结我忽略掉了没有获得结论问题。希望上述整理能够对你有所帮助。

12.2K20

Xcode 11 初体验

趁着最新更新正是版本 Xcode 11 于是就有这一篇 Xcode 11 初体验 Xcode工作改进(Workflows) 工程创建 创建工程进来,就会发现 User Interface 可以进行选择...指定文件打开位置 上面我们介绍了窗口分割,在 Xcode 11 中,你还可以按住 Option + Shift,然后在左边点击要打开文件,这时会出现窗口选择提示 你可以用键盘,或者鼠标任意方式选择你要打开这个文件窗口...看来苹果爸爸也实在受不了我们乱七八糟没有注释代码,提倡我们文明编程 Change Bar Change Bar这个功能之前也有,我还是比较喜欢!...对网络和温度模拟 Xcode 11 还加入了对网络环境和设备温度模拟。这两个条件对开发者来说应该不陌生,它们也是最难通过常规手段复现场景。...SceneDelegate 更新 Apple 建议我们把视图层级相关方法从 didFinishLanchingWithOptions 迁移到 SceneDelegate willConnectTo

3.1K10

iOS性能优化之启动优化

系统动态库存在于共享缓存,但自定义动态库没有这个待遇,所以苹果官方建议不要超过6个自定义动态库,超过可进行多个动态库合并,以此来优化动态库加载耗时 动态库合并,需要源码才能进行。...但不能直接跨进程访问,保证数据安全 2.2 缺页中断 当程序访问未被缓存内存页,就会触发缺页中断 缺页中断会将当前进程阻塞掉,此时需要先将数据载入到物理内存,然后再寻址,进行读取 部分情况下,被访问页面已经加载到物理内存中...,但页表中并不存在该对应关系,这时只需要在页表中建立虚拟内存到物理内存关系即可 其他情况下,操作系统需要将磁盘上未被缓存虚拟页加载到物理内存中 2.3 页面置换 物理内存空间是有限,当内存中没有空间...,这个启动方式就是冷启动 热启动:当启动应用时,后台已有该应用进程(例:按home键回到桌面,但是该应用进程是依然会保留在后台,可进入任务列表查看),所以在已有进程情况下,这种启动会从已有的进程中来启动应用...但真正难点是,如何能找到项目中启动需要调用所有方法和函数 5. Clang插庄 在项目中,对于OC方法,可以对objc_msgSend方法进行HOOK。

1.7K11

@StateObject 研究

SwiftUI 1.0代,如果想将引用类型作为source of truth,通常方法是使用@EnvironmentObject或者 @ObservedObject。...,由于其通常是在SceneDelegate或者当前View父辈、祖先View上创建,所以其生命周期必然不短于当前View,因此在使用中并不会发生由于生命周期不可预测而导致异常。...,不过由于@ObservedObject机制问题,其创建实例并不被当前View所拥有(当前View无法管理其生命周期),因此在一些特殊情况下出现不可预料结果。...从调试信息可以看出,当点击刷新,CountViewObserved中实例被重新创建了,并销毁了之前实例(CountViewObserved视图并没有被重新创建,仅是重新求了body值)。...在这个测试中,@ObservedObject创建实例生命周期长于当前View。

1.1K40

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

在两种方案中,如果在数据量很大情况下,我更倾向于第一种方式,这样可以按需求读取数据。...但是,此转换仅在文本字段完成编辑才会发生,并且不会阻止输入非数字字符。目前 SwiftUI 没有 API 可以限制用户在字段中输入字符。...Too complex to type checkQ:我在 iOS 14 SwiftUI 中遇到一个问题,我试图有条件地显示 3 个符合 Shape 协议对象一个。...Q&A ( 集锦 - 简体中文 )下文中问题来自开发者与苹果工程师在【 集锦 - 简体中文 】频道进行中文讨论( 没有出现在英文 SwiftUI 频道中 )。我直接对其进行了复制粘贴。...因为通常情况下并不需要这个值,如果是要检测滚动掉帧,可以在 Xcode Organizer 里查看,或者用 MetricKit 生成报告,开发环境也可以使用 Instruments 。

14.7K30

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

在预览含有Core Data元素视图崩溃出现次数会愈发频繁,在某种程度上可能已经影响了开发者在SwiftUI中使用Core Data热情。...结合两年来我在SwiftUI中使用Core Data经验和教训,我们将在本文中探讨: •导致SwiftUI预览崩溃部分原因•如何在之后开发中避免类似的崩溃出现如何在Xcode中安全可靠地预览含有...在明确了预览是模拟器概念后,很多在预览中出现问题,就有了新解决思路。...SwiftUI预设了大量同系统有关环境值,通过设置或响应这些数据,我们可以修改系统配置或读取系统信息。 SwiftUI视图采用树状结构组织,在任意节点视图上注入环境数据都将影响该节点所有子视图。...此种情况下,通常我们会在模拟器中删除App,重新安装运行即可解决问题。由于预览也是模拟器,在它沙盒中同样可能出现类似的问题。可以使用上文中关于预览模拟器修复方法来尝试解决。

5.1K10

Core Data with CloudKit (六) —— 共享数据

苹果为了实现以上功能,在背后做了大量工作。NSPersistentCloudContainer在同步数据,需要对每条数据进行网络自定义区域和本地持久化存储判断、转换等大量工作。...在开发者通过代码修改CKShare后,应将经过网络更新后CKShare持久化到本地Catch中,目前UICloudSharingController缺少了这个步骤,导致停止更新后出现Bug。...在当前版本中(XCode 13 beta 5),所有者停止更新后,并没有完成足够善后工作。...在SwiftUI下,用于尚未生成CKShare情况构造方法在使用UIViewControllerRepresentable包装异常,因此,推荐在SwiftUI下首先使用代码(share)手动为托管对象生成...已知问题 1.共享,如设置成任何人可接收,参与者将无法获取到共享前托管对象关系数据,且只有在共享托管对象修改后(或添加新关系数据后)才会在参与者应用程序中显示。

1.3K20

SwiftUI geometryGroup() 指南:从原理到实践

本文将介绍 geometryGroup() 概念、用法,以及在低版本 SwiftUI 中,在不使用 geometryGroup() 情况下如何处理异常。...然而在某些情况下,这种聚合行为可能会导致不希望结果;插入一个几何组可以纠正这种情况。几何组充当父视图与其子视图之间屏障,迫使位置和大小值由父视图解析和动画化,然后再传递给每个子视图。...那么是什么导致了出现了非预期结果,geometryGroup() 又是如何纠正了这一问题呢? 出现异常原因 我们可以通过分析 toggle 状态发生改变后,每个视图行为来查找原因。...对于 iOS 16,在文字变化较多且较大情况下,应尽量避免在父视图几何信息调整切换文字内容。 总结 在本文中,我们深入探讨了 SwiftUI 中 geometryGroup() 重要性和实用性。...在实际开发中,尤其是面对复杂动画和布局场景,理解并正确使用 geometryGroup() 是至关重要。 geometryGroup() 为我们提供了一个避免在个别情况下出现布局异常能力。

25110

深度解读 Observation —— SwiftUI 性能提升新途径

在 WWDC 2023 中,苹果介绍了 Swift 标准库中新成员:Observation 框架。它出现有望缓解开发者长期面临 SwiftUI 视图无效更新问题。...SwiftUI 视图如何观察属性变化 根据 Observation 框架工作原理,我们可以推测 SwiftUI 大概会采用下面的方法在可观察属性与视图更新之间创建联系: struct A:View...通过 withObservationTracking创建观察操作,每个被读取可观察属性都会主动地创建与订阅者之间关联。...Observation 是否解决了 ObservableObject 性能问题 是的,Observation 框架从两方面改善了可观察对象SwiftUI性能表现: 通过观察视图中可观察属性而不是可观察对象...随着越来越多 SwiftUI 应用转换到这个框架上,开发者会总结出更多使用心得。

49520

SwiftUI 与 Core Data —— 数据获取

尽管在实践中,如果能在确保不访问托管对象非线程安全属性前提下,在非创建托管对象线程中持有托管对象并不会出现崩溃情况,但出于谨慎考虑,我最终还是放弃了这种方式。...在创建自定义 DynamicProperty 类型,需要注意以下几点:可以在自定义类型中使用环境值或环境对象在视图被加载后,视图中所有符合 DynamicProperty 协议类型也将一并具备访问环境数据能力...但如果在视图尚未加载或没有提供环境值( 例如忘记注入环境对象没有提供正确视图上下文 )情况下访问环境数据,将引发应用崩溃。...,使用具体托管对象类型,有利于模块化开发。...读取其数据必然会在惰性容器中使用多个 ForEach ,从而引发性能问题

4.6K30

肘子 Swift 周报 #027 | 苹果助你成为一日“百万富翁”

文章不仅详述了日志写入、读取和性能处理,还指出了使用 OSLog 可能遇到问题和潜在陷阱,为开发者提供了全面的指导和实用建议。...然而,由于其独特构造,许多项目中 Preview 功能常常出现问题,使得这项本应出色功能频繁受到开发者批评。...在本文中,Alexander 介绍了如何解决使用 Xcode 预览时常见问题,并建立一个有效预览环境。...文章详细探讨了用户体验基本原则,如何利用空间计算中心理学原理,以及空间设计在创意解决问题应用历史。...这在很大程度上是由于全球各地开发者在没有实体设备情况下,难以在模拟器中对手势操作进行测试。

10210

SwiftUI 与 Core Data —— 数据定义

在今后文章中我们将尝试用新思路来创建一个 SwiftUI + Core Data app,看看能否避免并改善之前一些问题。本文将首先探讨如何定义数据。...遗憾是,托管对象对于以值类型为主 SwiftUI 来说并不算友好,因此,不少开发者都会在视图中将托管对象实例转换成一个结构体实例以方便接下来操作( 如何在 Xcode 下预览含有 Core Data...同时考虑到未来 Reducer 有被移出主线程趋势,让数据符合 Sendable 也能避免出现多线程方面的问题。...,mockGroup 可以在没有托管环境情况下使用。...如果没有 AnyConvertibleValueObservableObject ,开发者仅能对应用中部分视图进行预览( 在不创建托管环境情况下 ),而通过 AnyConvertibleValueObservableObject

2.4K40

SwiftUI中使用UIKit视图

将UIKit视图包装成SwiftUI视图,我们需要了解两者生命周期之间不同,不要强行试图找到完全对应方法,要从SwiftUI角度来思考如何调用UIKit视图。...例如,UIKit中我们将一个代理对象附加到Text field视图上,当用户输入时,当用户按下return键,该代理对象中对应方法将被调用。...上文关于UIActivityIndicatorView演示代码并没有出现这个情况。因此对于不同UIKit组件,我们需要了解其默认设置,酌情对其进行约束设定。...context: Context,通过这个上下文,我们可以访问到Coordinator(自定义协调器)、transaction(如何处理状态更新,动画模式)以及environment(当前视图环境值集合...通过直接响应该环境变化,我们可以在不编写特定TextFieldWrapper扩展情况下,即可为其增加配置功能。

8.1K20

从用SwiftUI搭建项目说起

前言 ---- 后续这个SwiftUI分类文章全部都是针对SwiftUI日常学习和理解写,自己利用Swift写第二个项目也顺利上线后续需求也不是特着急,最近正好有空就利用这段时间补一下自己对...SwiftUI理解,这个过程当中正好把整个学习过程记录下来,方便自己查阅,也希望能给需要同学一点点帮助。...,不算是真的深入掌握,我对SwiftUI也是在学习当中,现在能查阅关于SwiftUI资料很多是需要收费,遇到问题只能想办法努力解决,有写不钟意地方,希望多加指正!...我们在后面遇到一些问题也会回到这个官方文档进行一些验证。...下面的参考文章相信能帮助我们更好理解一下,SwiftUI! 参考文章: Apple SwiftUISwiftUI 谈声明式 UI 与类型系统 如何评价 SwiftUI? 项目地址

4.4K20

从零开始 Swift UI (一)

注: 本文编写,使用 Xcode 12.3、Swift 5.3.2 来构建 App 入门 Swift UI 已经有一段时间了,但是却一直没有写过什么练手项目,虽然之前跟着 Hackingwithswift...AppDelegate.swift 和 SceneDelegate.swift 转变为仅仅只有几行 xxApp.swift,得益于 Swift 5.3 加入 @main 关键字 swift 1import...绘制完了图形接下来需要在 View 中使用这个图形,并定位到对应地点。 在 Swift UI 中,可以使用 ZStack 结合 .postion 定位到指定地点。...为了获取到整个视窗长宽,还需要 GeometryReader 去读取子 View 长宽。在根 View 包裹可以获取到设备长宽。...我们再新建一个 SwiftUI View 文件,命名为 LikeView.swift 。在 MeetApp.swift 中增加一个 View。

1.4K30

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

当您想对事物工作方式进行非常具体控制,最好编写自己视频视图。 让事情顺利进行是你工作。...问题是你不能直接在 SwiftUI 中使用这个层。 毕竟 SwiftUI 没有 CALayer概念。 为此,您需要回到 UIKit。...play() 默认情况下,这会将您循环剪辑显示设置为自动播放和音频关闭。 构建并运行以查看您完整工作剪辑节目! 不幸是,当最后一个剪辑播放完毕后,视频播放器会变黑。 3....当您这样做,您会注意到即使视频循环播放器没有发出任何噪音,您音乐也已关闭!...幸运是,通过调整 AVAudioSession 设置来解决这个问题并不难。

6.9K10
领券