如何使用 Core Data 在 DB 中仅添加单个值?
Posted
技术标签:
【中文标题】如何使用 Core Data 在 DB 中仅添加单个值?【英文标题】:How to add only single value in DB with Core Data? 【发布时间】:2013-07-15 16:21:22 【问题描述】:我正在尝试将unique values
添加到我的sqlite
数据库中。
我尝试在.xcdatamodeld
中创建唯一属性,但没有成功。
这部分代码将所有terminaison
添加到表F016Terminaison
中。如何只添加unique terminaison values
?
for (NSString *terminaison in [[verbe objectForKey:temps] objectForKey:@"terminaison"])
F016Terminaison *newTerminaison = [NSEntityDescription insertNewObjectForEntityForName:@"F016Terminaison" inManagedObjectContext:self.managedObjectContext];
newTerminaison.name = terminaison;
【问题讨论】:
【参考方案1】:每次调用insertNewObjectForEntityForName
都会创建一个新对象并将其插入
托管对象上下文。
如果您只想要唯一值,则必须首先检查是否存在具有该值的对象
已经存在。这是使用带有谓词的NSFetchRequest
完成的
[NSPredicate predicateWithFormat:@"name == %@", terminaison];
如果您必须插入许多值,那么获取 所有 个具有 首先从新列表中获取值,而不是多次获取请求。
比较“核心数据编程指南”中的"Implementing Find-or-Create Efficiently"。
【讨论】:
【参考方案2】:您需要执行 fetch 以查找对象的现有实例,如果不存在则添加它。
例如:
// assumes your object has a "uniqueAttribute" and you supply a uniqueValue to test
NSPredicate * predicate = [NSPredicate predicateWithFormat:@"uniqueAttribute == %@", uniqueValue];
NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setPredicate:predicate];
[fetchRequest setFetchLimit:1];
NSError * error = nil;
NSArray * results = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
if ([results count] == 1)
id existingObject = [results objectAtIndex:0];
// do something with existing object
else if (results)
// create a new object
else
NSLog(@"executeFetchRequest returned error: %@ (userInfo: %@)", [error localizedDescription], [error userInfo]);
【讨论】:
以上是关于如何使用 Core Data 在 DB 中仅添加单个值?的主要内容,如果未能解决你的问题,请参考以下文章
策略问题:从 XML 检索数据以更新本地 Core Data DB?
可以将 Core Data 与不同的预填充 sqlite db 一起使用吗?