gpt4 book ai didi

iOS:从 JSON 更新核心数据数据库

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:07:37 24 4
gpt4 key购买 nike

在我的应用程序中,我以这种方式存储来自 JSON 文件的数据(这是身份的示例)

NSManagedObjectContext *context = [self managedObjectContext];

for (id element in array){

NSLog(@"element:%@", element);

Str *str = [NSEntityDescription insertNewObjectForEntityForName:@"Str" inManagedObjectContext:context];
Id_loc *loc = [NSEntityDescription insertNewObjectForEntityForName:@"Id_loc" inManagedObjectContext:context];
loc.id_loc = @"id_1";
[str addLocObject:loc];
}

问题是我每天都从网络服务中解析这个 JSON;所以每天它都可以更改其“Str”标识(我的 JSON 的一个对象)的数据和编号。问题是,更新我的核心数据数据库的更好解决方案是什么?我有两种可能性:

1- 使用 NSFetchRequest 更新我的数据库,检查元素是否存在,并更新它;如果它不存在,我应该创建它。最后,如果一个对象不在 JSON 中,但它在我的核心数据数据库中,我应该删除它,这是一系列复杂的控件。

2- 删除所有核心数据数据库并再次填充新的 JSON 文件。

在您看来,更好的选择是什么?

我告诉你,在我的应用程序中,我必须只读取我的数据库,并且在我使用它时不需要删除或修改它。

最佳答案

对于我的应用程序 - 我也使用 CoreData - 我决定使用选项 1,原因有几个。

首先,它只是增加了一些编码,但这种方法的性能要好得多。如果您打算使用 NSFetchedResultController,您绝对应该使用更新选项。否则它会监听您的更改并且会多次重新加载所有 View ,因为您删除了所有对象并重新添加了它们。

最重要的是,删除所有对象在 CoreData 中是非常昂贵的操作,因为您必须首先获取所有对象,而不是一个一个地删除它们!!!这真是个坏主意:)对于数百个条目,如果您计划在后台进行更新而不是在更新过程中阻塞屏幕,这确实会降低应用程序性能。

作为一项优化,我建议为每个对象保留服务器端时间戳,并仅从移动端上次更新时间提取更改 - 增量更新。

关于iOS:从 JSON 更新核心数据数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21880392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com