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

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

预览正常工作时,它可以极大地提高开发效率;而预览又随时可能因为各种莫名其妙的原因崩溃,不仅影响开发进程,同时又让开发者感到沮丧(很难排查出导致预览崩溃的故障)。...在预览含有Core Data元素的视图时崩溃的出现次数会愈发频繁,在某种程度上可能已经影响了开发者在SwiftUI中使用Core Data的热情。...结合两年来我在SwiftUI中使用Core Data的经验和教训,我们将在本文中探讨: •导致SwiftUI预览崩溃的部分原因•如何在之后的开发避免类似的崩溃出现•如何在Xcode安全可靠地预览含有...其他视图、方法、声明等的代码错误,都可能会导致你无法预览当前的视图。 在排查视图预览崩溃的原因时,一定不能只关注当前视图或临近视图的代码,其他代码的错误可能才是罪魁祸首。...如果你的预览已经不好用了,且无法通过例如文件修改时间等手段判断对应目录,删除掉全部的目录也未尝不可。

5.1K10

构建稳定的预览视图 —— SwiftUI 预览的工作原理

由于预览崩溃的次数和场景的增加,一些开发者已经视预览SwiftUI 的缺点之一,并对其产生了排斥感。 预览功能真的如此不堪吗?我们当前使用预览的方式真的妥当吗?...可惜的是,Toomas Vahter在文章没有告诉读者崩溃原因。我借用这段代码来与大家一起探究预览功能是如何工作的。...这就解释了这段代码为什么在模拟器和真机可以运行,但会导致预览崩溃。因为预览是以衍生代码作为入口,只依赖有限的导入信息对衍生代码进行编译,因此可能会出现因信息不完整而无法编译的情况。...通过 XPC 发送消息指令, _XCPreviewKit 框架更新预览窗口,并在两个线程建进行交互与同步 用户在 Xcode 界面中看到预览效果 从预览的实现可以得到的部分结论 如果项目无法编译,预览无法正常运行...但是,这也可能导致无法正常编译的情况发生(例如本文中的例子) 预览是以预览衍生文件作为入口的,开发者必须在预览代码预览视图提供足够的上下文信息( 例如注入所需的环境对象 ) 总的来说,Xcode 预览功能虽然在视图开发流程中极为方便

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

    SwiftUI 与 Core Data —— 数据获取

    尽管在实践,如果能在确保不访问托管对象的非线程安全属性的前提下,在非创建托管对象的线程持有托管对象并不会出现崩溃的情况,但出于谨慎的考虑,我最终还是放弃了这种方式。...方法的具体细节,开发者无法自行向 SwiftUI 申请数据保存地址,但可以通过在自定义的类型( 符合 DynamicProperty 协议 )使用系统提供的符合 DynamicProperty 协议的类型...// MockableFetchRequest 代码包含public enum FetchDataSource: Equatable where Value: BaseValueProtocol...self 的问题在订阅闭包中使用底层数据,如此就可以绕过无法在结构体引入 self 的问题。...在下一篇文章,我们将探讨如何在 SwiftUI 安全地响应数据,如何避免因为数据意外丢失而导致的行为异常以及应用崩溃。希望本文能够对你有所帮助。

    4.6K30

    如何结合 Core Data 和 SwiftUI

    尽管时间相距遥远,Apple 还是投入了大量工作以确保这两种强大的技术能够完美地相互配合使用,这意味着 Core Data 就像始终以这种方式设计一样,集成到 SwiftUI 。...我们无法在代码中看到该类,因为它是在构建项目时自动生成的,就像 Core ML 的模型一样。...更好的是,它已经将其添加到 SwiftUI 环境,这就是@FetchRequest属性包装器起作用的原因——它使用了环境可用的任何托管对象上下文。...这是一个引发函数的调用,因为理论上它可能会失败。实际上,我们所做的一切都没有失败的可能,因此我们可以使用try?来调用它——–我们不在乎捕获错误。 因此,请将最后一行添加到按钮的操作: try?...PS: 如果预览报错,那么请跑模拟器 译自 How to combine Core Data and SwiftUI[1] 参考资料 [1] How to combine Core Data and SwiftUI

    11.8K30

    Swift 周报 第四十一期

    前言 本期是 Swift 编辑组整理周报的第四十一期,每个模块初步成型。各位读者如果有好的提议,欢迎在文末留言。...在此提案,全局变量涵盖任何静态持续时间的存储:在全局范围声明的 let 和存储 var,或者作为静态成员变量。...从发出的符号声明无法通过访问器的存在({ get },{ get set } 等)来推断这一点,因为这些也会出现在存储的公共 private(set) 属性。...在许多情况下,你可能会发现你在终端开发的程序崩溃了,但你无法复现问题。没有适当的崩溃日志,这可能会让你非常沮丧,你知道你的程序有一个 bug ,但你不知道问题出在哪里,也不知道如何复现它。...SwiftUI 的 visual effects[11] 摘要: 这篇博客介绍了 SwiftUI 在 WWDC2023 引入的一种叫做 visualEffect 的新视图修饰符。

    23240

    架构之路 (七) —— iOS App的SOLID原则(一)

    你需要内存存储来在 SwiftUI 预览显示虚假数据。...SwiftUI 列表具有用于两种报告类型的两个硬编码 NavigationLink 视图。 如果要添加新类型的报告,例如 每周报告,您必须在此处和 ReportRange更改代码。 这是低效的。...这不仅可以让您删除在此处编写的代码,还可以让您轻松地为测试的视图提供模拟数据源。 构建并运行。 您会发现一切仍然完好无损,预览现在会显示您的模拟费用。...如果您继续在此项目上工作,您几乎肯定会想要更改并添加保存行为。例如,您可能想要更改数据库框架、添加跨设备同步或添加服务器端组件。...这是关于让您的代码预测可能会出错的地方,这样您的应用程序就不会脆弱,并且在收到意外输入时不会崩溃

    4.7K10

    肘子的 Swift 周报 #015 | 新框架、新思维

    由于版本限制,未来一段时间许多开发者仍将无法体验像 Observation、SwiftData 这样的革命性框架所带来的便利和开发思维上的转变,这是非常遗憾的一点。...例如,文章特别指出了一个常见问题:在启用 ProRAW 格式进行拍照后,预览图像可能会在垂直方向上轻微偏移。...作者通过一系列实验,发现通过调整缩放因子便能有效解决这一问题,尽管这样做可能会对预览和捕获的图像视野及尺寸产生一定影响。...文章,作者详尽地介绍了这一工具的技术实施方案,涵盖了从文本文件检测、分句处理到词语检测和整体工具集成的各个环节。...他还分享了开发过程遇到的一些主要挑战,如如何准确识别文本文件、进行文本分句校准、中文纠错检测与校准,以及在非终端环境实现与 python 脚本的互通。

    13810

    SwiftUI 动画进阶 — Part 5:Canvas

    然而,该视图产生的崩溃使这里的一些例子无法分享。虽然不是所有的问题都得到了解决,但现在每个例子都能顺利运行。在文章的最后,我将指出我找到的一些解决方法。...一个简单的 Canvas 简而言之,画布Canvas 是一个 SwiftUI 视图,它从一个渲染闭包获得绘制指令。与 SwiftUI API 的大多数闭包不同,它不是一个视图生成器。...如果你对解析的属性和方法没有任何用途,这很方便。 在这个例子,文本被解决了。...我在代码添加了一些注释,以帮助你浏览它,如果你有兴趣的话。 Canvas 崩溃 不幸的是,在写这篇文章的时候,我遇到了 Canvas 的一些崩溃问题。幸运的是,它们在每个测试版中都有很大的改进。...我设法解决了这些崩溃的问题,至少使用了其中一个方法: 减少绘图量。在数字雨的例子,你可以减少列的数量。 使用更简单的渐变。最初,数字雨柱有三个颜色的渐变。当我把它减少到两个时,崩溃就消失了。

    2.7K10

    Windows 10 Build 21332:纯净安装移除 Paint 3D 应用

    虽然微软明确表示 Dev 频道的功能更新不再和功能更新接轨,但目前开发的不少新功能会整合到今年秋季上线的 21H2 功能更新。 ?...调整和优化 ● 从剪贴板历史记录粘贴为纯文本的新选项(WIN + V)现在已经向开发频道的所有内部人员推出。 ● 在此版本,Dev 频道的所有人都重新启用了主题感知的闪屏。...● 修复了一个问题,当您重命名SD卡上的文件文件夹时,可能会导致您的PC错误检查。 ● 修复了运行趋势科技软件的设备可能会随机进行错误检查的问题。...此问题通过更新版本的预览版图形驱动程序修复,网址为:https://aka.ms/x64previewdriverprox。如果您遇到此问题,请查看反馈意见收集以了解更多信息。...可变刷新率的显示器场景也可能导致撕裂。 ● 登录界面上的网络弹出窗口在此版本无法打开,这将阻止你在登录前连接到新的网络。

    1.4K10

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

    尽管 SwiftUI 的惰性容器以及 Core Data 都有各自的内存占用优化机制,但随着应用视图内容的复杂( 图文混排 ),越来越多的开发者遇到了内存占用巨大甚至由此导致 App 崩溃的情况。...数据库字段仅保存与该文件对应的文件 ID ( 50 个字节 )。通常为了保证数据库的性能,开发者会为尺寸较大的 Binary 属性开启这一选项。...此时请不要惊讶,你可以尝试点击添加数据按钮继续增加数据,再次滚动到底部,你将看到更加令人震惊的内存占用数值,不过有极大的可能会看不到( 应用已经崩溃了 )。...这意味着,在托管对象上下文中,data 属性即使在填充后也仅有 50 个字节( 文件 ID )。 目前无法找到 Core Data 在行缓存以及上下文中处理这些外置二进制数据的任何资料。...私有上下文滚动至底截屏 至此,我们终于完成了对该段代码的优化,无需再担心其可能因占用内存过大而导致的崩溃

    1.3K10

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

    尽管 SwiftUI 的惰性容器以及 Core Data 都有各自的内存占用优化机制,但随着应用视图内容的复杂( 图文混排 ),越来越多的开发者遇到了内存占用巨大甚至由此导致 App 崩溃的情况。...数据库字段仅保存与该文件对应的文件 ID ( 50 个字节 )。通常为了保证数据库的性能,开发者会为尺寸较大的 Binary 属性开启这一选项。...此时请不要惊讶,你可以尝试点击添加数据按钮继续增加数据,再次滚动到底部,你将看到更加令人震惊的内存占用数值,不过有极大的可能会看不到( 应用已经崩溃了 )。...这意味着,在托管对象上下文中,data 属性即使在填充后也仅有 50 个字节( 文件 ID )。 目前无法找到 Core Data 在行缓存以及上下文中处理这些外置二进制数据的任何资料。...图片 至此,我们终于完成了对该段代码的优化,无需再担心其可能因占用内存过大而导致的崩溃

    2.4K40

    SwiftUI 在 WWDC 24 之后的新变化

    每年,SwiftUI 都会通过引入更多功能来赶上 UIKit。今年也不例外。让我们深入了解 SwiftUI 框架引入的新功能。...这可能会破坏你的代码,所以请记住这一点。视图集合SwiftUI 为 Group 和 ForEach 视图引入了新的重载,允许我们创建自定义容器,如 List 或 TabView。...英雄动画SwiftUI 引入了 matchedTransitionSource 和 navigationTransition,我们可以在任何 NavigationLink 实例配对使用。...extension EnvironmentValues { @Entry var itemsPerPage: Int = 10}预览新的 Previewable 宏允许我们在预览引入状态,而无需将其包装到额外的包装视图中...框架的下一版本包括许多新 API,如窗口推送、TextField 和 TextEditor 视图中的文本选择观察、搜索焦点监控、自定义文本渲染、新的 MeshGradient 类型等等,我无法在一篇文章涵盖所有内容

    13010

    ObservableObject研究

    目前它仅提供非常有限的逻辑语句 在编写代码,为了能够实现更多逻辑和丰富的UI,我们必须把代码分散到各个View,再最终合成。否则你会经常获得无法使用过多逻辑等等的错误提示。...SwiftUI在程序编译时便已将所有的View编译成View树,它尽可能的只对必须要响应状态变化的View(@State完美的支持)进行重绘工作。...此时只需把View分解成几个View,即使仍然在同一个文件,Xcode的工作也会立刻正常起来。...预览的可靠性限制 新的预览功能本来会极大的提升布局及调试效率,但由于其对复杂代码的支持并不完美,将View分割后,通过使用合适的Preview控制语句可以高效、无错的对每个子View进行独立预览。...众多的依赖将使我们无法享受到SwiftUI提供的View更新优化机制。

    2.4K60

    Ask Apple 2022 与 Core Data 有关的问答

    我正在开发一个应用程序,用户可能一周左右拍一次照片。保存到 Core Data 或保存到目录哪种更合适?我不想保存到照片库,因为用户可能不想让别人轻易看到这些照片。...我们的应用程序模板无法为您的应用程序制作良好的 UI,而这几乎就是在此闭包需要做的事情。...在 SwiftUI ,我们通常会使用 environment 为视图树注入视图上下文,一旦 loadPersistentStores 出现错误导致 container 无法正常创建,那么调用上下文的注入将会失败...你的特定应用程序的写入速率可能需要不同的时间窗口,但是当使用 NSPersistentCloudKitContainer 清除历史记录时,可能会强制将存储文件数据全面同步到 CloudKit,因此不建议经常这样做...我们建议您将其发布在开发者论坛,Apple 工程师将在此进行整周的监控,并能够为您提供进一步的帮助。

    2.9K20

    探讨 SwiftUI 的几个关键属性包装器

    在这篇文章,我们将探讨几个在 SwiftUI 开发中经常使用且至关重要的属性包装器。本文旨在提供对这些属性包装器的主要功能和使用注意事项的概述,而非详尽的使用指南。...在复杂的视图层级,逐级传递 @Binding 可能导致数据流难以追踪,此时应考虑使用其他状态管理方法。 确保 @Binding 的数据源是可信的,错误的数据源可能导致数据不一致或应用崩溃。...注意事项 在 iOS 13 ,由于没有提供 @StateObject ,此时 @ObservedObject 是唯一选择,可能会因为无法保证实例的存续期而产生 意想不到的结果[12],为了避免类似问题...@StateObject 通常用于创建和维护实例,而 @ObservedObject 用于引入和响应存在的实例。...在 iOS 17+ 的环境,如果应用主要依赖于 Observation 和 SwiftData 框架,那么这三个属性包装器的使用频率可能会相对较低。

    32510

    SwiftUI 与 Core Data —— 数据定义

    在今后的文章我们将尝试用新的思路来创建一个 SwiftUI + Core Data 的 app,看看能否避免并改善之前的一些问题。本文将首先探讨如何定义数据。...代码仍在更新可能会出现与文章不完全一致的情况。http://mpvideo.qpic.cn/0b2euiaasaaakaahn24eznrvbiwdbgraacia.f10002.mp4?...无需更改代码便可以适应不同的框架( 纯 SwiftUI 驱动、TCA 或其他的 Redux 框架 )所有的视图均可以实现在不使用任何 Core Data 代码的情况下进行预览,并可对 Mock 数据进行动态响应...遗憾的是,托管对象对于以值类型为主的 SwiftUI 来说并不算友好,因此,不少开发者都会在视图中将托管对象实例转换成一个结构体实例以方便接下来的操作( 如何在 Xcode 下预览含有 Core Data...Core Data 元素的 SwiftUI 视图: https://www.fatbobman.com/posts/coreDataInPreview/#为_SwiftUI_预览提供_Core_Data

    2.4K40

    为什么SwiftUI的视图使用结构体?

    在UIKit,每个视图都来自一个名为UIView的类,该类具有许多属性和方法:背景色,确定其放置方式的约束,用于将其内容呈现到其中的图层等等。...struct or class 通常这不是问题,但是有一个名为UIStackView的特定子类,它类似于SwiftUI的VStack和HStack。...在SwiftUI,我们所有的视图都是简单的结构体,几乎可以自由创建。想想看:如果您制作一个仅包含一个整数的结构体,则结构体的整个大小就是:一个整数。没有其他的。...您会发现,类能够自由更改其值,这可能导致代码混乱——SwiftUI如何知道什么更改了值并需要更新UI?...提示:如果您在视图中使用类,则可能会发现代码无法编译或在运行时崩溃。 相信我:使用结构体。

    3.2K10

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

    强制解包将导致应用崩溃。如今的 Core Data,随着云同步以及持久化存储历史跟踪的普及,数据库的某个数据可能在任意时刻被其他的设备或同一个设备中使用该数据库的其他进程所删除。...在 convertToValueType 为属性提供备选值,是否可以避免出现崩溃的情况?答案是,原始的版本仍可能会出现问题。...将转换过程运行于托管对象上下文所在的线程,由于无法获取上下文信息,转换将失败。...为删除的托管对象实例提供正确的备选内容一定会有人对本节的题目感到奇怪,数据已经删除了,还需要提供什么信息?...下面的代码来自 Todo 项目中 TCA Target 的 TaskListContainer.swiftimage-20221212162439240尽管值类型帮助我们规避了可能存在的线程风险,但又出现了视图无法对托管对象实例的变化进行实时响应的新问题

    3.3K20
    领券