Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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
Core data 是否可以在SwiftUI的场景代理中为核心数据实体创建提取请求_Core Data_Swiftui_Appdelegate_Uiscenedelegate - Fatal编程技术网

Core data 是否可以在SwiftUI的场景代理中为核心数据实体创建提取请求

Core data 是否可以在SwiftUI的场景代理中为核心数据实体创建提取请求,core-data,swiftui,appdelegate,uiscenedelegate,Core Data,Swiftui,Appdelegate,Uiscenedelegate,我正试图使我的核心数据实体与我正在使用的Web服务保持同步。问题是web服务每天都更新项目,因此我尝试创建一个获取请求,将缓存项目与远程项目进行比较,并在有任何更改、删除或添加时更新缓存项目 理想情况下,我希望在用户进入应用程序之前完成此操作。因此,我试图在场景代理中创建一个获取请求 逻辑是这样的:在应用程序加载时,我解析json Web服务中的项目。同时,我为现有的本地核心数据实体创建一个获取请求,将本地项与远程项进行比较,并在需要时更新缓存项 这可能吗?任何关于如何以及何时这样做的建议或建议

我正试图使我的核心数据实体与我正在使用的Web服务保持同步。问题是web服务每天都更新项目,因此我尝试创建一个获取请求,将缓存项目与远程项目进行比较,并在有任何更改、删除或添加时更新缓存项目

理想情况下,我希望在用户进入应用程序之前完成此操作。因此,我试图在场景代理中创建一个获取请求

逻辑是这样的:在应用程序加载时,我解析json Web服务中的项目。同时,我为现有的本地核心数据实体创建一个获取请求,将本地项与远程项进行比较,并在需要时更新缓存项


这可能吗?任何关于如何以及何时这样做的建议或建议都将不胜感激

没有那么复杂。在创建视图时,您已经在ScenedLegate中具有上下文。只需执行fetch

    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
    let fetchRequest: NSFetchRequest<YourEntity> = YourEntity.fetchRequest()
    fetchRequest.sortDescriptors = []
    //fetchRequest.predicate = //some filters
    let result = try? context.fetch(fetchRequest)//it always returns an array but it may be empty. Fetch may throw if disc is unavailable or some other reasons
    //do what you need
    let contentView = ContentView().environment(\.managedObjectContext, context)

通常,可以将UUID存储为对象版本。每次在后端修改对象时,都可以使用新的UUID更新版本。因此,您只需要检查版本-如果版本不同,则需要更新对象。但它仅在用户无法脱机修改对象的情况下使用。如果可以的话,一定有一些复杂的逻辑来解决冲突。

谢谢。我想得太多了。