有两种方法可以将数据插入到 Core Data 中 - 使用哪种方法取决于您。但是,其中之一取决于您是否为 Core Data db 的数据模型生成了模型类。
常规方法是使用以下方法:
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];
请注意,您还需要调用 save 才能使其生效。
希望这会有所帮助!祝你好运!
编辑:
抱歉,我一定是看错了问题!
要检查现有记录,您需要创建一个获取请求,然后在您的托管对象上下文中执行它。
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 时)。
祝你好运!