【问题标题】:Core Data - Insert based by parameter核心数据 - 基于参数的插入
【发布时间】:2014-11-19 15:47:30
【问题描述】:

我有一个名为 Person 的表。 如何进行基于名称的数据输入,而不是重复名称。

例子:

我有一个叫乔希的人。不能有另一个名为 Josh 的人。

类似PK的功能。

【问题讨论】:

    标签: ios objective-c core-data swift


    【解决方案1】:

    不幸的是,CoreData 没有内置的方法来防止受骗。

    首先,使用谓词执行获取请求以查看值是否存在。如果不存在,则插入新实体。

    示例)

        let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
        let managedContext = appDelegate.managedObjectContext!
        let personName = "Josh"
    
        let fetchRequest = NSFetchRequest(entityName: "Person")
        let predicate = NSPredicate(format: "name = %@", personName)
        fetchRequest.predicate = predicate
    
        var error: NSError?
        let fetchedResults = managedContext.executeFetchRequest(fetchRequest, error: &error) as [NSManagedObject]?
    
        if let results = fetchedResults {
            // if no results found, then insert
            if results.count == 0 {
                let entity =  NSEntityDescription.entityForName("Person", inManagedObjectContext: managedContext)
                let person = Person(entity: entity!, insertIntoManagedObjectContext:managedContext)
                person.setValue(personName, forKey: "name")
    
                var error: NSError?
                if !managedContext.save(&error) {
                    println("Could not save \(error), \(error?.userInfo)")
                }
            }
    
        } else {
            println("Could not fetch \(error), \(error!.userInfo)")
        }
    

    【讨论】:

      【解决方案2】:

      好吧,CoreData没有内置主键的逻辑。实际上CoreData管理的是可以持久化的对象图,严格来说不是ORM。

      因此,您必须发出请求(使用 NSFetchRequest)以获取名字为 Josh 的对象,如果没有,您将添加它,否则您可以更新它。

      可以在您的代码中构建安全性,以使用 validateForInsert、validateForUpdate 等来强制执行该唯一性规则。 https://developer.apple.com/library/mac/Documentation/Cocoa/Reference/CoreDataFramework/Classes/NSManagedObject_Class/index.html#//apple_ref/occ/instm/NSManagedObject/validateForInsert:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-02
        • 2019-05-02
        • 2015-07-20
        • 2018-05-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多