Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何从ViewController获取CoreData属性_Ios_Swift_Core Data_Swiftui - Fatal编程技术网

Ios 如何从ViewController获取CoreData属性

Ios 如何从ViewController获取CoreData属性,ios,swift,core-data,swiftui,Ios,Swift,Core Data,Swiftui,我有一个简单的CoreData堆栈,其中包含一个CoreData类Booking,我想在ViewController中使用它。我想获取预订的每条记录,并使用每条记录的数据属性将事件放入日历视图控制器中 我发现这段代码应该是用来获取CoreData实体的,看起来还可以——我只是不知道如何使用这一点以外的数据,比如在循环中获取Booking.date属性并打印它 在我的ViewController课程中有: @Environment(\.managedObjectContext) var m

我有一个简单的CoreData堆栈,其中包含一个CoreData类
Booking
,我想在ViewController中使用它。我想获取
预订的每条记录
,并使用每条记录的
数据
属性将事件放入日历视图控制器中

我发现这段代码应该是用来获取CoreData实体的,看起来还可以——我只是不知道如何使用这一点以外的数据,比如在循环中获取
Booking.date
属性并打印它

在我的
ViewController
课程中有:

    @Environment(\.managedObjectContext) var managedObjectContext
    @FetchRequest(
        entity: Booking.entity(),
        sortDescriptors: [
            NSSortDescriptor(keyPath: \Booking.id, ascending: false)
        ]
    ) var bookings: FetchedResults<Booking>
@Environment(\.managedObjectContext)var managedObjectContext
@获取请求(
实体:Booking.entity(),
sortDescriptors:[
NSSortDescriptor(密钥路径:\Booking.id,升序:false)
]
)var预订:获取结果
这没有错误,但是我不能确定这是否确实是从
预订
实体获取数据,因为我不知道如何使用返回的数据

我尝试在我的
覆盖func loadView()
方法中使用
打印(预订)
。当它打开打印语句时,它崩溃了,似乎是因为它是
nil
,并且没有打开-但是当我试图打开它时,没有任何效果

我想我从CoreData获取
预订的方式一定是做错了什么,但我就是说不出是什么错。是否有从
ViewController


注意:我已经在
AppDelegate
中为
NSPersistantContainer
saveContext
完成了所有必要的设置。我已经设法在代码的其他区域使用了
CoreData
,因此我知道它的这一方面工作正常。在这个
ViewController

中,将
FetchedResultsController
放在一个
可观察对象中,作为您的管理器/ViewModel可能会有所帮助

@已发布的var bookings
将通过
NSFetchedResultsControllerDelegate
的方法
controllerDidChangeContent(:)

通过单例模式或其他模式使用
observeObject
的共享实例将使您能够在
ViewController
和SwiftUI
视图之间共享数据

我刚才为另一个问题制作了这个视频,显示了基本设置。FetchedResultsController的

如果您真的使用ViewController类,那么这些属性包装器都不能正常工作(如果可以的话),因为它们只为SwiftUI视图设计。这是有道理的。我想我没有意识到这一点。感谢您提供的信息。对于我的日历组件,我使用的是
UIViewController
类。我可以使用
可观察对象
吗?我还使用UIViewControllerRepresentable在SwiftUI堆栈中显示它。如果可观察对象仅在SwiftUI中使用,我不确定如何将核心数据实体放入我的
UIViewController
类中。
@ObservedObject
只能在SwiftUI中用于更新
UIViewController
,您将使用传统意义上的
FetchedResultsController
(在第二个链接中介绍。
controllerDidChangeContent(:)
更新
observeObject
和您的
UIViewController
)。