小编Oth*_*hyn的帖子

SwiftUI:ForEach of FetchedResults 给出错误 - “'NSManagedObject' 类型的值没有成员......”

我是 SwiftUI 的新手,部分是 Swift,所以希望有人能对我明显缺少的东西有所了解。原谅乱码!我还没有机会重构。

我正在使用@FetchRequest属性包装器MemoriesCoreData模型中拉回所有列表,并在NSFetchRequest<Memory>其上定义了一个方法,从NSManagedObject.

当我FetchRequest<Memory>通过 a遍历in SwiftUI的结果时ForEach,它会将 的实例返回NSManagedObject到循环变量中,而不是 of Memory,因此显示错误:Value of type 'NSManagedObject' has no member 'createdAt'对于以下 SwiftUI 类:

import SwiftUI

struct MemoryView: View {

    @Environment(
        \.managedObjectContext
    ) var managedObjectContext

    @FetchRequest(
        fetchRequest: Memory.allMemories()
    ) var allMemories: FetchedResults<Memory>

    @State private var newMemory = ""

    var body: some View {
        NavigationView {
            List {
                Section(header: Text("What's on your mind?")) {
                    HStack { …
Run Code Online (Sandbox Code Playgroud)

swift swiftui

13
推荐指数
3
解决办法
6779
查看次数

SwiftUI 自定义视图的 ViewBuilder 不会在子类 ObservedObject 更新上重新渲染/更新

我已经研究了几天,搜索了 Swift 和 SwiftUI 文档、SO、论坛等,但似乎找不到答案。

这是问题所在;

我有一个 SwiftUI 自定义视图,它对远程资源的自定义 API 请求类进行一些状态确定。View 处理显示加载状态和失败状态,以及它的主体内容通过 ViewBuilder 传递,这样如果来自 API 的状态成功并且资源数据被加载,它将显示页面的内容。

问题是,当子类 ObservedObject 更新时,ViewBuilder 内容不会重新渲染。对象更新以响应 UI(当按下按钮时等),但 UI 永远不会重新渲染/更新以反映子类 ObservedObject 内的更改,例如,子类 ObservedObject 中数组后面的 ForEach 在以下情况下不会刷新数组内容改变。如果我将它移出自定义视图,ForEach 将按预期工作。

我可以确认代码编译并运行。Observers 和debugPrint()'s 始终显示ApiObject正在正确更新状态,并且视图ApiState完全正确地反映了更改。它只是ContentViewBuilder 的。我假设是因为 ViewBuilder 只会被调用一次。

编辑:上面的段落应该是提示,ApiState更新正确,但是在将大量日志记录到应用程序之后,UI 没有监听子类 ObservedObject 的发布。属性在变化,状态也在变化,但 UI 并没有对其做出反应。另外,下一句被证明是错误的,我在 VStack 中再次测试,组件仍然没有重新渲染,这意味着我找错了地方!

如果是这种情况,VStack其他此类元素如何解决此问题?还是因为我ApiObjectView在状态更改时被重新渲染,导致子视图“重置”?尽管在这种情况下,我希望它能够接受新数据并按预期工作,但它永远不会重新渲染。

有问题的代码是在CustomDataList.swiftApiObjectView.swift下方。我已经发表评论指出正确的方向。

这是示例代码;

// ApiState.swift
// Stores the API state for where the request and data parse …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui observedobject viewbuilder

2
推荐指数
1
解决办法
3130
查看次数

标签 统计

swift ×2

swiftui ×2

ios ×1

observedobject ×1

viewbuilder ×1