Ios 覆盖核心数据值

Ios 覆盖核心数据值,ios,iphone,swift,core-data,Ios,Iphone,Swift,Core Data,您好,我需要覆盖CoreData上的值(如果已经存在)。例如,如果已经在CoreData上,我有Josh,我需要删除这个,然后保存新的Josh func save(value:String, forkey:String) { let context = getContext() let entity = NSEntityDescription.entity(forEntityName: "Lastname", in: context) let add = NSManag

您好,我需要覆盖
CoreData
上的值(如果已经存在)。例如,如果已经在
CoreData
上,我有Josh,我需要删除这个,然后保存新的Josh

func save(value:String, forkey:String) {
    let context = getContext()
    let entity = NSEntityDescription.entity(forEntityName: "Lastname", in: context)

    let add = NSManagedObject(entity: entity!, insertInto: context)
    add.setValue(value, forKey: forkey)

    do {
        try context.save()
        print("save ->  \(value)")
    } catch {
        print("err \(error)")
    }
}

我们可以检查值是否存在。然后在数据库中更新和创建值

class func checkAndUpdateAtIndex(entry_id: String, comment_text: String, comment_name: String, comment_pic: String, comment_date: String, comment_id: String, comment_isDeleted: String, comment_userid: String) {
    let context: NSManagedObjectContext = DataAccess.shared.managedObjectContext
    let request = NSFetchRequest(entityName: "Comment")
    request.predicate = NSPredicate(format: "comment_id = %@", comment_id)

    if let fetchResults = (try? DataAccess.shared.managedObjectContext.executeFetchRequest(request)) as? [NSManagedObject] {
        if fetchResults.count != 0{
            //update value
            var managedObject = fetchResults as! [Comment]
            managedObject[0].setValue(entry_id, forKey: "entry_id")
            managedObject[0].setValue(comment_text, forKey: "comment_text")
            managedObject[0].setValue(comment_name, forKey: "comment_name")
            managedObject[0].setValue(comment_pic, forKey: "comment_pic")

        }else {  
            // create new entity if not found
            let newItems = NSEntityDescription.insertNewObjectForEntityForName("Comment", inManagedObjectContext: context) as! Comment

            newItems.entry_id = entry_id
            newItems.comment_text = comment_text
            newItems.comment_name = comment_name
            newItems.comment_pic = comment_pic            
        }


            do {
                try context.save()
            } catch {}
    }
}

在这个更新方法中,我首先得到我们想要更新的实体,然后在那个地方存储新的值。

我们可以检查值是否存在。然后在数据库中更新和创建值

class func checkAndUpdateAtIndex(entry_id: String, comment_text: String, comment_name: String, comment_pic: String, comment_date: String, comment_id: String, comment_isDeleted: String, comment_userid: String) {
    let context: NSManagedObjectContext = DataAccess.shared.managedObjectContext
    let request = NSFetchRequest(entityName: "Comment")
    request.predicate = NSPredicate(format: "comment_id = %@", comment_id)

    if let fetchResults = (try? DataAccess.shared.managedObjectContext.executeFetchRequest(request)) as? [NSManagedObject] {
        if fetchResults.count != 0{
            //update value
            var managedObject = fetchResults as! [Comment]
            managedObject[0].setValue(entry_id, forKey: "entry_id")
            managedObject[0].setValue(comment_text, forKey: "comment_text")
            managedObject[0].setValue(comment_name, forKey: "comment_name")
            managedObject[0].setValue(comment_pic, forKey: "comment_pic")

        }else {  
            // create new entity if not found
            let newItems = NSEntityDescription.insertNewObjectForEntityForName("Comment", inManagedObjectContext: context) as! Comment

            newItems.entry_id = entry_id
            newItems.comment_text = comment_text
            newItems.comment_name = comment_name
            newItems.comment_pic = comment_pic            
        }


            do {
                try context.save()
            } catch {}
    }
}
在这个更新方法中,我首先得到我们想要更新的实体,然后在那个地方存储新的值。

  • 获取对象
  • 如果没有对象,则创建一个新对象
  • 更新属性
  • 保存上下文

注意:我不再使用Swift 2,可能会发生编译器错误。

  • 获取对象
  • 如果没有对象,则创建一个新对象
  • 更新属性
  • 保存上下文


注意:我不再使用Swift 2,可能会发生编译器错误。

请查看本教程。所有的基本方法都在这里得到了很好的描述和实现。如果在核心数据中找到值,您的意思是更新值吗?@Adi是的,对不起;)检查->如果找到,则删除并保存->如果不只是保存,则首先必须检查该值是否在数据库中。。如果它存在,您可以更新它,如果不存在,您可以添加它。@Adi好的,但我如何检查?如果add.value(forKey:forKey)=value?请查看本教程。所有的基本方法都在这里得到了很好的描述和实现。如果在核心数据中找到值,您的意思是更新值吗?@Adi是的,对不起;)检查->如果找到,则删除并保存->如果不只是保存,则首先必须检查该值是否在数据库中。。如果它存在,您可以更新它,如果不存在,您可以添加它。@Adi好的,但我如何检查?如果add.value(forKey:forKey)=value?它工作,但如果值不在实体中,它会给出错误,因为“在实体中找不到”它工作,但如果值不在实体中,它会给出错误,因为“在实体中找不到”