核心数据搜索和更新
Posted
技术标签:
【中文标题】核心数据搜索和更新【英文标题】:Core data search and update 【发布时间】:2019-12-27 13:18:50 【问题描述】:我正在努力寻找可以更新核心数据实体的教程。例如,如果我有一个字段和一个添加按钮,我就知道如何将它添加到实体中。此字段可以添加名称:john、jack、jill,但如果我再次添加 john,我想确保不输入重复项。
这是我的添加代码。
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let entity = NSEntityDescription.entity(forEntityName: "UserAccountTbl", in: context)!
let person = NSManagedObject(entity: entity, insertInto: context)
person.setValue(NameSurname, forKeyPath: "nameSurname")
try context.save()
【问题讨论】:
试试这个:***.com/a/49199015/8374890 Core Data 对象具有可以覆盖的方法,例如validateForUpdate()
、validateForInsert()
等。
【参考方案1】:
斯威夫特 4
func isEntityAttributeExist(id: Int, entityName: String) -> Bool
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let managedContext = appDelegate.persistentContainer.viewContext
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: entityName)
fetchRequest.predicate = NSPredicate(format: "id == %@", id)
let res = try! managedContext.fetch(fetchRequest)
return res.count > 0 ? true : false
目标 C
NSFetchRequest *fetch = [NSFetchRequest fetchRequestWithEntityName:@"UserAccountTbl"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"nameSurname == %@", ameSurname];
[fetch setPredicate:predicate];
YourObject *obj = [ctx executeRequest:fetch];
if(!obj)
//not there so create it and save
obj = [ctx insertNewManagedObjectForEntity:@"UserAccountTbl"]; //typed inline, dont know actual method
obj. nameSurname = NameSurname;
[ctx save];
【讨论】:
先检查记录是否存在然后不要插入...如果它不存在则插入以上是关于核心数据搜索和更新的主要内容,如果未能解决你的问题,请参考以下文章