覆盖核心数据值
问题描述:
您好我需要覆盖CoreData
上的值(如果已经存在)。例如,如果已经在CoreData
我有乔希我需要删除今明保存新的乔希覆盖核心数据值
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 {}
}
}
在这种更新方法创造价值,我首先让我们想更新实体,然后在那个地方存储新值。
答
- 取物的对象。
- 创建一个新的对象,如果没有。
- 更新的属性。
- 保存上下文。
func save(value:String, for key:String) {
let context = getContext()
let request = NSFetchRequest(entityName: "Lastname")
let predicate = NSPredicate(format:"%K == %@", value, key)
request.predicate = predicate
do {
let fetchResults = try context.executeFetchRequest(request)
let object : NSManagedObject
if fetchResults.isEmpty {
let entity = NSEntityDescription.entity(forEntityName: "Lastname", in: context)
object = NSManagedObject(entity: entity!, insertInto: context)
} else }
object = fetchResults[0]
}
object.setValue(value, forKey: key)
try context.save()
print("save -> \(value)")
} catch {
print("err \(error)")
}
}
注:我没有使用斯威夫特2了,可能会出现一个编译器错误。
+0
它的工作,但如果价值不是实体它给错误,因为“在实体中找不到” – k0le
看看这个教程https://www.raywenderlich.com/145809/getting-started-core-data-tutorial。所有基本的方法都在这里很好的描述和实施。 – Oleshko
你的意思是如果在核心数据中发现更新值,你的意思是? – Aditya
@Adi是的,对不起;)检查 - >如果发现删除并保存 - >如果不仅保存 – k0le