我有一个由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/

10-11 02:59
查看更多