如何在 SwiftUI 中实现文本字段列表而不破坏删除

2023-11-23

When I

  1. 在 XCode 中创建主从应用程序
  2. 使用核心数据
  3. 向事件模型添加一个新字段(例如title as String)
  4. 改变MasterView对此实施
struct MasterView: View {
    @FetchRequest(
        sortDescriptors: [NSSortDescriptor(keyPath: \Event.timestamp, ascending: true)], 
        animation: .default)
    var events: FetchedResults<Event>

    @Environment(\.managedObjectContext)
    var viewContext

    var body: some View {
        List {
            ForEach(events, id: \.self) { event in
                NavigationLink(
                    destination: DetailView(event: event)
                ) {
                    TextField("Title", text: Binding(ObservedObject<Event>(wrappedValue: event).projectedValue.title)!)
                }
            }.onDelete { indices in
                self.events.delete(at: indices, from: self.viewContext)
            }
        }
    }
}

,即交换出Text for TextField与适当的绑定title的属性event对象,XCode 会愉快地编译,并且只要我不尝试从列表中删除,应用程序就会以预期的行为运行。

当我尝试删除一个Event,它因这个堆栈跟踪而崩溃

* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
    #0: [33m`SwiftUI.BindingOperations.ForceUnwrapping.get(base: Swift.Optional<A>) -> A[0m
    #1: [33m`protocol witness for SwiftUI.Projection.get(base: A.Base) -> A.Projected in conformance SwiftUI.BindingOperations.ForceUnwrapping<A> : SwiftUI.Projection in SwiftUI[0m
    #2: [33m`SwiftUI.(ProjectedLocation in _5A9440699EF65619D724050F1A6941EE).update(context: AttributeGraph.AttributeContext<SwiftUI.VoidAttribute>, state: inout Swift.Optional<Any>) -> (B.Projected, Swift.Bool)[0m
    #3: [33m`SwiftUI.LocationBox.update(context: AttributeGraph.AttributeContext<SwiftUI.VoidAttribute>, state: inout Swift.Optional<Any>) -> (A.Value, Swift.Bool)[0m
    #4: [33m`SwiftUI.Binding.(ScopedLocation in _5436F2B399369BE3B016147A5F8FE9F2).update(context: AttributeGraph.AttributeContext<SwiftUI.VoidAttribute>, state: inout Swift.Optional<Any>) -> (A, Swift.Bool)[0m
    #5: [33m`protocol witness for SwiftUI.Location.update(context: AttributeGraph.AttributeContext<SwiftUI.VoidAttribute>, state: inout Swift.Optional<Any>) -> (A.Value, Swift.Bool) in conformance SwiftUI.Binding<A>.(ScopedLocation in _5436F2B399369BE3B016147A5F8FE9F2) : SwiftUI.Location in SwiftUI[0m
    #6: [33m`SwiftUI.LocationBox.update(context: AttributeGraph.AttributeContext<SwiftUI.VoidAttribute>, state: inout Swift.Optional<Any>) -> (A.Value, Swift.Bool)[0m
    #7: [33m`SwiftUI.Binding.(Box in _5436F2B399369BE3B016147A5F8FE9F2).update(property: inout SwiftUI.Binding<A>, context: AttributeGraph.AttributeContext<SwiftUI.VoidAttribute>) -> Swift.Bool[0m
    #8: [33m`static SwiftUI.(BoxVTable in _68550FF604D39F05971FE35A26EE75B0).update(ptr: Swift.UnsafeMutableRawPointer, property: Swift.UnsafeMutableRawPointer, context: AttributeGraph.AttributeContext<SwiftUI.VoidAttribute>) -> Swift.Bool[0m
    #9: [33m`SwiftUI._DynamicPropertyBuffer.update(container: Swift.UnsafeMutableRawPointer, context: AttributeGraph.AttributeContext<SwiftUI.VoidAttribute>) -> Swift.Bool[0m
    #10: [33m`SwiftUI.(DynamicPropertyBody in _9F92ACD17B554E8AB7D29ABB1E796415).update(context: inout AttributeGraph.AttributeContext<SwiftUI.(DynamicPropertyBody in _9F92ACD17B554E8AB7D29ABB1E796415)<A>>) -> ()[0m
    #11: [33m`protocol witness for static AttributeGraph.UntypedAttribute._update(_: Swift.UnsafeMutableRawPointer, graph: __C.AGGraphRef, attribute: __C.AGAttribute) -> () in conformance SwiftUI.(DynamicPropertyBody in _9F92ACD17B554E8AB7D29ABB1E796415)<A> : AttributeGraph.UntypedAttribute in SwiftUI[0m
    #12: [33m`partial apply forwarder[0m
    #13: [33m`AG::Graph::UpdateStack::update[0m
    #14: [33m`AG::Graph::update_attribute[0m
    #15: [33m`AG::Subgraph::update[0m
    #16: [33m`SwiftUI.ViewGraph.(runTransaction in _D63C4EB7F2B205694B6515509E76E98B)(in: __C.AGGraphRef) -> ()[0m
    #17: [33m`closure #1 (__C.AGGraphRef) -> (prefs: Swift.Bool, idealSize: Swift.Bool, outputs: SwiftUI.ViewGraph.Outputs) in SwiftUI.ViewGraph.updateOutputs(at: SwiftUI.Time) -> ()[0m
    #18: [33m`SwiftUI.ViewGraph.updateOutputs(at: SwiftUI.Time) -> ()[0m
    #19: [33m`closure #1 () -> () in closure #1 () -> () in (extension in SwiftUI):SwiftUI.ViewRendererHost.render(interval: Swift.Double, updateDisplayList: Swift.Bool) -> ()[0m
    #20: [33m`closure #1 () -> () in (extension in SwiftUI):SwiftUI.ViewRendererHost.render(interval: Swift.Double, updateDisplayList: Swift.Bool) -> ()[0m
    #21: [33m`(extension in SwiftUI):SwiftUI.ViewRendererHost.render(interval: Swift.Double, updateDisplayList: Swift.Bool) -> ()[0m
    #22: [33m`closure #1 () -> () in SwiftUI._UIHostingView.requestImmediateUpdate() -> ()[0m
    #23: [33m`reabstraction thunk helper from @escaping @callee_guaranteed () -> () to @escaping @callee_unowned @convention(block) () -> ()[0m
    #24: [33m`_dispatch_call_block_and_release[0m
    #25: [33m`_dispatch_client_callout[0m
    #26: [33m`_dispatch_main_queue_callback_4CF[0m
    #27: [33m`__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__[0m
    #28: [33m`__CFRunLoopRun[0m
    #29: [33m`CFRunLoopRunSpecific[0m
    #30: [33m`GSEventRunModal[0m
    #31: [33m`UIApplicationMain[0m
  * #32: [33m`main[0m at AppDelegate.swift:13
    #33: [33m`start[0m

我已经尝试过这个:SwiftUI 持有对已删除核心数据对象的引用导致崩溃但无济于事。我还尝试将文本字段提取到单独的视图类中并使用适当的属性包装器。

我想我在某种程度上滥用了基础设施(绑定、可观察对象等)。我应该如何使用它们来实现列表中的文本字段?


代替

TextField("标题", 文本: Binding(ObservedObject(wrappedValue: 事件).projectedValue.title)!)

Use

TextField("Title", text: Binding<String>(
                   get: {event.title ?? "<none>"}, set: {event.title = $0}))

已测试并适用于 Xcode 11.2、iOS 13.2

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 SwiftUI 中实现文本字段列表而不破坏删除 的相关文章

  • SwiftUI 从一个列表拖动到另一个列表

    我正在尝试在列表之间拖放 我尝试过的 我找到了一个在 UIKIt 中执行此操作并使用 UIViewControllerRepresentable 的解决方案 但这不是我想要的 另一个解决方案是在列表上使用 onDrag 但这在 iPad 上
  • 在 SwiftUI 中使用获取视图的宽度

    我需要获取渲染视图的宽度SwiftUI 这显然没那么容易 我的看法是 我需要一个返回视图尺寸的函数 就这么简单 var body some View VStack alignment leading Text timer name font
  • SwiftUI NavigationView 看不到图像

    我有一个代码并制作 NavigationLink 按钮 我编写文本和图像 但我的图像看不到 请帮助我 VStack Image Coachs resizable aspectRatio contentMode fill frame widt
  • SwiftUI - 取决于多个条件

    SwiftUI 中是否可以依赖多个条件 例如显示一个工作表 sheet isPresented stateA stateB content this is not working 或者已知有不同的方法 我只能带你去看门 c 墨菲斯 今天是运
  • 我想为 TabBar 设置背景

    I don t know how to change the background of the TabBar by an Image I try to change the background of TabBar not try to
  • 如何在 SwiftUI 中呈现视图而不将其嵌入到当前导航流中?

    我已经完成了日志记录入门 并且需要呈现一个 HomeView 它对之前的导航流程一无所知 var body some View if viewModel isValidated destination else LoadingView 通过
  • SwiftUI:如何更新由一组静态数据驱动的列表并从另一组动态数据中提取一些信息?

    我什至不确定标题问题是否有意义 不管怎样 请继续阅读 编辑 交叉链接到苹果开发者论坛 https developer apple com forums thread 663208 编辑 这是源代码 http git morpheu5 net
  • SwiftUI 中的计算 (NSObject) 属性不会更新视图

    所以 我想要一个Text它根据我的 CoreData 模型的内容更改其内容 为此 我在 Xcode beta 4 中使用了计算属性 但它似乎不再起作用了 这是一个错误还是还有其他我没有看到的问题 我真正遇到的问题是我的视图 和计算的属性 似
  • SwiftUI NavigationView 从其内部开始

    因此 我在页面视图样式的 TabView 中嵌入了一个 NavigationView 首次加载时 NavigationView 将在其内部启动 然后重新加载后即可正常显示 我不确定是什么原因造成的 我制作了一个 GIF 来更好地说明问题 这
  • SwiftUI 中如何防止键盘推高视图? [复制]

    这个问题在这里已经有答案了 我是 SwiftUI 编程新手 我已经创建了一个视图 但是一旦用户点击文本字段 键盘就会出现 整个视图就会向上推 我该如何解决这个问题 我相信你可以使用 ignoresSafeArea keyboard 我在 X
  • 使用 Firebase/Analytics pod 时 SwiftUI 预览不起作用

    似乎在将 Xcode 12 更新到 beta 5 后 使用 Firebase Analytics pod 时 SwiftUI 预览不再工作 预览失败并出现错误 linker command failed with exit code 1 u
  • WidgetKit 并发症不会更新

    我们正在迁移ClockKit并发症WidgetKit在我们的手表应用程序中 watchOS 9 迁移很顺利 UI部分工作得很好 然而 我们遇到了小部件在手表应用程序请求时未更新的问题 我相信我们错过了一些非常简单和基本的东西 但到目前为止还
  • 如何为PDFView设置PDFPageOverlayViewProvider?

    更新 我正在尝试设置pageOverlayViewProvider for a PDFView并且它没有按预期工作 PDFPageOverlayViewProvider方法没有被调用 PDFViewDelegate方法运行良好 struct
  • SwiftUI 多行文本背景颜色

    我在 SwiftUI 中有一个包含多行的文本视图 我知道我可以更改文本的背景颜色 Text
  • 如何在 SwiftUI 中仅使用 ForEach 而不是列表来滑动删除

    我正在 SwiftUI 中使用 ForEach 制作自定义列表 我的目标是进行滑动删除手势 而不是将 ForEach 嵌入到列表中 到目前为止 这是我的代码 import SwiftUI struct ContentView View le
  • 在 SwiftUI 中使用可观察对象切换视图

    我正在练习尝试使用 SwiftUI 中的可观察对象切换视图 但我的代码无法正常工作 我知道我可以用 State 来做到这一点 但我想用可观察的对象来实现这一点 当我单击内容视图中的图像时 图像不会改变 有人能帮我吗 内容视图 swift i
  • SwiftUI 键盘工具栏有条件

    不确定这是否是一个错误或者我是否做错了什么 但如果我使用 toolbar ToolbarItemGroup placement navigationBarLeading if isFocused zipCode Text Test 当等于
  • 如何从 ContentView 外部显示 SwiftUI 警报?

    我正在构建 Swift 应用程序 并试图找出如何显示警报 我有一个单独的 swift 文件正在执行一些计算 并且在某些条件下我希望它向用户显示警报 基本上告诉他们出了问题 然而 我见过的大多数例子都要求警报在ContentView或以其他方
  • iOS 14 无效的框架尺寸(负或非有限)

    我的应用程序使用 GeometryReader 和一些填充来设置 NavigationView 内的视图框架尺寸 从 iOS 14 开始 我收到以下错误消息 框架尺寸无效 负或非有限 这是一些要测试的示例代码 import SwiftUI
  • 如何更改特定区域的工作表的 DragGesture?

    如果我有一个打开工作表的按钮 Button action show true label Text Open sheet isPresented show Text Sheet view 整张纸是 可移动的 有一个DragGesture 有

随机推荐

  • 不是有效 python 标识符的属性

    通常的属性访问方法要求属性名称是有效的 python 标识符 但属性不必是有效的 python 标识符 gt gt gt class Thing def init self setattr self 0potato 123 gt gt gt
  • 更改表并添加 UNIQUE 键会导致错误

    我有一张桌子叫Animal AnimalId是主键 我想设置该列AnimalType id作为独特的 我有一个AnimalType表并需要在此处设置外键 ALTER TABLE Animal ADD UNIQUE Animal Animal
  • 在 WebAPI 方法中返回 HTTP 403

    我如何返回HTTP 403 from a WebAPI方法 我试过扔一个HttpResponseException with HttpStatusCode Forbidden 我已经尝试过 return request CreateErro
  • 使用奥格登引理与常规泵引理进行上下文无关语法

    我正在学习问题中引理之间的区别 我能找到的每个参考文献都使用以下示例 a i b j c k d l i 0 or j k l 以显示两者之间的差异 我可以找到一个使用常规引理来 反驳 它的例子 选择 w uvxyz s t 维 gt 0
  • ECMAScript 3 在主要浏览器中的实现仍然存在差异吗?

    有人可以指出 ECMAScript 第三版在当今浏览器中的实现差异吗 Chrome Safari IE8 FF 使用 ECMAScript 3 标准 而不是 FF 和 IE 对 JScript 和 JavaScript 的扩展 时我们安全吗
  • C 生成不重复的随机数[重复]

    这个问题在这里已经有答案了 我想生成 1 到 13 之间的随机数而不重复 我用了这个方法 但是并不能保证没有信誉 for i 0 i lt 13 i array i 1 rand 13 请帮我 C语言 正如评论所说 Fill an arra
  • Android 单选按钮取消选中

    该应用程序是一个步进音序器应用程序 具有 16 个无线电组 每组有 8 个按钮 它工作得很好 除非一个组选择了一个按钮 否则我无法将其关闭 除非我使用我创建的清除按钮来清除所有无线电组 我想添加的是一些代码 它表示当再次选择选定的单选按钮时
  • 如何为 iOS 构建 OpenCV 2.4.9?

    我正在关注这些指示属于 openCV 文档 但它们确实已经过时了 提到了 iOS4 或 iOS5 XCode 4 2 安装在 Developer 中 等等 它没有构建 并且我有各种错误 所有初始测试均失败 Performing Test H
  • Angular JS 生成 PDF - 有创建者 - 制作者模块吗?

    正如标题所说 Angular 有 PDF 创建器 生成器吗 我见过https github com MrRio jsPDF 但找不到 Angular 的任何内容 我想将 html 页面制作为 pdf 文件以供下载 您可以将您提到的 Java
  • 无法在我的 C# 应用程序中添加静态端口映射

    我正在尝试在我的 C 应用程序中添加新的静态端口映射 因为我的应用程序作为服务器运行 并且我希望它侦听端口 8000 NATUPNPLib UPnPNATClass upnpnat new NATUPNPLib UPnPNATClass N
  • git:提交多个文件但添加消息

    我的存储库中有大量文件 有时我处理 20 个文件 并且想提交所有文件 但是 我想为每个添加一条消息 如何添加所有已更新的文件并为每个文件添加一条消息 而无需手动为每个文件运行命令 是否可以进行批量运行并提示我为每个运行添加一条消息 注意 您
  • 为什么人们捍卫正则表达式语法? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 有一个类似的问题 但它只是得到了人们总是给出的关于正则表达式语法的相同旧答案 但这不是这里的重点 所以请尽量不要下意识地提出关于正则表达式语法的相同旧答案 这次尝试更加原创和个性化 正则表
  • 将 RGB 颜色转换为英文颜色名称,例如使用 Python 的“green”

    我想将颜色元组转换为颜色名称 例如 黄色 或 蓝色 gt gt gt im Image open test jpg gt gt gt n color max im getcolors im size 0 im size 1 gt gt gt
  • 如何以编程方式设置 Admob appID (19.1.0)?

    Before 版本19 1 0 appID 可以通过编程方式设置 如下所示 MobileAds initialize Context context String appID 新方法是 initialize Context OnInitia
  • 从 VS 2015 和 EF7 的模型生成 SQLite 数据库

    我正在尝试利用 Entity Framework 7 和 SQLite 数据库文件制作 Windows Presenter Foundation 应用程序 我已经制作了 edmx 模型 但是当尝试生成模型时我无法建立 SQLite 连接 尝
  • 如何在百里香中转义双引号 " ?

    我想在 Thymeleaf 的字符串中添加双引号 我有以下形式的内容 td td 我想要的结果是 td Value of apple is 1 5 td 但我得到以下异常 EL1065E unexpected escape characte
  • z3 解数

    如何使用 z3 来计算解的数量 例如 我想证明对于任何n 方程组有 2 个解 x 2 1 y 1 1 y n 1 以下代码显示了给定的可满足性n 这不完全是我想要的 我想要任意的解决方案数量n usr bin env python from
  • 具有多个 Expects() 调用的 PHPUnit 模拟

    使用 PHPUnit 我想知道我们如何从同一个存根 模拟中获得多个期望 例如 我想测试模拟是否具有该方法display 调用并返回 NULL 我也想测试一下这个方法process 将被调用 事实上我的测试叫做testProcessIsCal
  • 选择元素的初始值

    我想初始化一个select具有初始值 我有一个从后端返回的 Json 对象 如下所示 Nom xxx TypeIld 1 Nom xxx TypeId 1 我有一个像这样声明的 typeId 数组 Nom Plats TypeId 0 No
  • 如何在 SwiftUI 中实现文本字段列表而不破坏删除

    When I 在 XCode 中创建主从应用程序 使用核心数据 向事件模型添加一个新字段 例如title as String 改变MasterView对此实施 struct MasterView View FetchRequest sort