2016-08-26 43 views
0

我有一個由id和detailText組成的核心數據實體。這個想法是,我的文本字段存儲它的內容旁邊的某個id是我的情況下的時間戳。現在,當用戶首次存儲detailText時,它應該像它應該那樣工作,但是如果用戶爲特定的id編輯detailText,我想刪除舊的detailText並放入新的detailText。 基本上我需要在Swift/Core數據中編寫下面的查詢幫助。編輯特定ID的核心數據密鑰的值

UPDATE myEntity SET detailText = theNewDetailText WHERE ID = myID; 

這是我目前的保存和替換功能,我使用謂詞來找到我的選擇ID,但是我無法更新相應detailText字段中的某些ID。

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 
    } 

我已經通過谷歌和堆棧溢出,但到目前爲止還沒有成功地執行此所以任何幫助是極大的讚賞。

回答

1

我已經解決了它

 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)") 
     } 
}