我有一个由id和detailText组成的核心数据实体。我的想法是,我的textfield将它的内容与特定的id一起存储,在我的例子中,id是一个时间戳。现在,当用户第一次按原样存储detailText时,但如果用户为特定id编辑detailText,我希望删除旧的detailText并放置新的detailText。
基本上,我需要在Swift/Core数据中编写以下查询的帮助。
UPDATE myEntity SET detailText = theNewDetailText WHERE ID = myID;
这是我当前的save和replace函数,我使用谓词查找select my id,但更新特定id对应的detailText字段时遇到问题。
func saveTextFromTextFieldToCoreData(textToSave: String){
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
let entityDescription = NSEntityDescription.entityForName("GoalDetail", inManagedObjectContext:managedContext)
let thingToSaveToCD = NSManagedObject(entity: entityDescription!, insertIntoManagedObjectContext: managedContext)
print("received text to store and it's \(textToSave)")
if entityIsEmpty("GoalDetail") == true {
thingToSaveToCD.setValue(data.timeStamp, forKey: "id")
thingToSaveToCD.setValue(textToSave, forKey: "detailText")
print("succesfully saved \(data.timeStamp) and \(textToSave)")
} else {
replaceTheValueFromCoreData()
}
}
func replaceTheValueFromCoreData(){
print("i have entered the delete core data item")
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
let fetchRequest = NSFetchRequest(entityName: "GoalDetail")
let predicate = NSPredicate(format: "id == %@", data.timeStamp)
fetchRequest.predicate = predicate
//let entityDescription = NSEntityDescription.entityForName("GoalDetail", inManagedObjectContext:managedContext)
//let thingToSaveToCD = NSManagedObject(entity: entityDescription!, insertIntoManagedObjectContext: managedContext)
do{
let goal = try appDelegate.managedObjectContext.executeFetchRequest(fetchRequest)
try managedContext.save()
}
catch{
//error
}
我经历过google和stack溢出,但到目前为止还没有成功执行,因此非常感谢任何帮助。
最佳答案
我已经解决了
func saveTextFromTextFieldToCoreData(textToSave: String){
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
let entityDescription = NSEntityDescription.entityForName("GoalDetail", inManagedObjectContext:managedContext)
let thingToSaveToCD = NSManagedObject(entity: entityDescription!, insertIntoManagedObjectContext: managedContext)
//clumsy named entity is empty returns if there is already
// an ID / data.timeStamp in that entity so that I can
// either save or replace the data
print("received text to store and it's \(textToSave)")
if entityIsEmpty("GoalDetail") == true {
thingToSaveToCD.setValue(data.timeStamp, forKey: "id")
thingToSaveToCD.setValue(textToSave, forKey: "detailText")
print("succesfully saved \(data.timeStamp) and \(textToSave)")
} else {
replaceTheValueFromCoreData()
print("ovo tribq prominiti")
}
}
func replaceTheValueFromCoreData(){
print("i have entered the delete core data item")
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
let fetchRequest = NSFetchRequest(entityName: "GoalDetail")
let predicate = NSPredicate(format: "id == %@", self.data.timeStamp)
fetchRequest.predicate = predicate
do {
if let fetchResults = try appDelegate.managedObjectContext.executeFetchRequest(fetchRequest) as? [NSManagedObject] {
if fetchResults.count != 0{
var managedObject = fetchResults[0]
managedObject.setValue(self.trextViewForGoal.text, forKey: "detailText")
try managedContext.save()
}
}}
catch let error as NSError {
// failure
print("Fetch failed: \(error.localizedDescription)")
}
}
关于swift - 编辑某些ID的核心数据 key 的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39175087/