核心数据搜索和更新

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];

【讨论】:

先检查记录是否存在然后不要插入...如果它不存在则插入

以上是关于核心数据搜索和更新的主要内容,如果未能解决你的问题,请参考以下文章

快速更新核心数据对象 3

核心数据插入后 TableView 行不更新

从核心数据中检索特定对象

iPhone 核心数据驱动搜索:如何,资源?

Objective-c 应用更新和核心数据

更改核心数据堆栈后使用核心数据创建 SQLite 文件后未更新