问题:更新并快速保存表格之间的关系,其中包含大量数据或其中一个表已经保存.
我有五个表TvGenres,TvSubgenre,TvProgram,Channels,TvSchedules与它们之间的关系,如下图所示
现在的问题是所有的数据下载都是根据以前的数据顺序发生的,而且与SQLite不同,我需要设置它们之间的关系,为此我必须一次又一次地搜索表并设置它们之间的关系,这是很费时的,所以如何我能更快地做到这一点吗?
我使用2种不同的方法来解决,但两种方法都没有按预期工作
首先让我告诉我,下载是如何工作的
首先,我根据用户语言获取所有频道详细信息从频道,我获取下一周的所有时间表(这是大量数据(大约30k +))从调度数据,我获取所有程序数据(这也是很多数据的 )
方法1,
下载所有数据并创建它们的对象列表,然后在所有下载完成后立即存储它们但仍然设置它们之间的关系需要时间和最糟糕的事情现在循环发生两次首先我必须循环创建所有类列表然后循环再次存储在表视图中仍然没有解决关系耗时的问题.
方法2
像下载频道一样逐个下载存储它们,然后下载时间表存储它们然后下载程序然后将它们存储在核心数据中这一切都可以,但现在频道与时间表有关系,时间表与程序有关系,并设置关系,而我我存储时间表我也获取与该时间表相关的通道,然后设置关系,对于程序和时间表是相同的,下面花费时间的是代码,所以如何解决这个问题或者我应该如何下载和存储以便它变得如此快可能.
仅用于存储计划的代码
func saveScheduleDataToCoreData(withScheduleList scheduleList: [[String : Any]], completionBlock: @escaping (_ programIds: [String]?) -> Void) {
let start = DispatchTime.now()
let context = coreDataStack.managedObjectContext
var progIds = [String]()
context.performAndWait {
var scheduleTable: TvSchedule!
for (index,response) in scheduleList.enumerated() {
let schedule: TvScheduleInformation = TvScheduleInformation(json: response )
scheduleTable = TvSchedule(context: context)
scheduleTable.channelId = schedule.channelId
scheduleTable.programId = schedule.programId
scheduleTable.startTime = schedule.startTime
scheduleTable.endTime = schedule.endTime
scheduleTable.day = schedule.day
scheduleTable.languageId = schedule.languageId
scheduleTable.isReminderSet = …Run Code Online (Sandbox Code Playgroud)