如何使用 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 一起使用吗?

如何在 PostgreSQL 中仅获取数据库的表名

ios如何在Core Data的实体中添加事件?

是否有用于在 Core Data DB 中插入/编辑行的编辑器?

如何将 Core Data 添加到已经创建的 iOS 项目中