gpt4 book ai didi

ios - 如何使用核心数据执行插入/更新

转载 作者:IT王子 更新时间:2023-10-29 07:54:03 27 4
gpt4 key购买 nike

我掌握了使用 Core Data 插入记录和删除记​​录的基础知识;但是,我希望能为最常见的功能之一 - insert/update 提供帮助。

基本上,我使用 NSMutableArray arrayWithContentsOfURL 获取包含 mysql 表中的行的数组。我现在需要做的是同步我的 CoreData 存储。

换句话说,我需要将数组中的每一行添加到我的 CoreData 表中,但如果它已经存在,我需要用最新值更新记录。此外,如果它存在于 Core Data 而不是下载的数组中,我需要将其删除。

我可能可以一起破解它;但是,我想看看它是如何在没有内存泄漏的情况下正确有效地完成的。

最佳答案

有两种方法可以将数据插入到 Core Data 中 - 使用哪种方法取决于您。但是,其中之一取决于您是否为核心数据数据库的数据模型生成了模型类。

常规方法是使用以下内容:

NSManagedObject *object = [NSEntityDescription insertNewObjectForEntityForName:@"table" 
inManagedObjectContext:context];
[object setValue:@"value1" forKey:@"stringColumn"];
[object setValue:12 forKey:@"numberValue"];
NSError *error;
if (![context save:&error]) {
NSLog(@"Failed to save - error: %@", [error localizedDescription]);
}

这是假设您已经设置了托管对象上下文。如果在循环中创建对象并将其插入到上下文中,然后在循环结束后保存,效率会高得多。

另一种方法没有太大区别,但在类型安全方面更安全。如果您已经生成了模型类(您可以从xcdatamodels) 然后您可以简单地创建该类的对象并设置其属性。

TableObject *object = [NSEntityDescription insertNewObjectForEntityForName:@"table" 
inManagedObjectContext:context];
[object setStringColumn:@"value1"];
[object setNumberValue:12];
NSError *error;
if (![context save:&error]) {
NSLog(@"Failed to save - error: %@", [error localizedDescription]);
}

要从表中删除,只需从表中检索对象(我假设您在此处使用第二种方法进行插入,并因此生成了模型类)并使用以下命令:

[context deleteObject:object];

请注意,您还需要调用保存才能生效。

希望对您有所帮助!祝你好运!

编辑:抱歉,我一定是看错了问题!

要检查现有记录,您需要创建一个获取请求,然后在您的托管对象上下文中执行它。至少,一个 Fetch Request 需要一个实体(所以它知道要搜索哪个表)。要指定搜索词,您需要创建一个谓词(否则请求将简单地返回表中的所有内容)。您还可以指定一组排序描述符,以便对结果进行排序。

NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"table" inManagedObjectContext:context];
[request setEntity:entity];

NSError *errorFetch = nil;
NSArray *array = [context executeFetchRequest:request error:&errorFetch];

此代码创建一个获取请求,并返回数组中名为“table”的表中的每个对象。从这里开始,由于所有必需的对象都在数组中,您可以检查和编辑记录。如果您进行任何更改,请记住保存上下文!以下循环使用与上述示例相同的表记录每个对象中的第一个值。

for(TableObject *object in array)
{
NSLog(@"object value1 = %@", object.value1);
}

您也可以使用上述功能从该点删除记录。

有关获取请求的更多信息,请提供 class reference看看。我还强烈建议阅读有关排序描述符和谓词的内容,因为它们对于搜索您的 Core Data 数据库非常重要,并且它们的某些用途比其他用途效率低(特别是在创建 NSPredicates 时)。

祝你好运!

关于ios - 如何使用核心数据执行插入/更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4102460/

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