2017-09-23 85 views
0

這是我的場景...單擊右上角(導航欄)上的加號按鈕,會出現帶有文本框的alertview,並添加一些數據在文本框中,然後按OK按鈕。這會導致文本字段中的數據顯示在tableview中,並且它也存儲在覈心數據中。更新桌面視圖(編輯後)中的條目並顯示在桌面視圖中的問題

然後當我點擊那個現在有來自alertview文本框的數據的行時,我轉到另一個視圖進行編輯。此viewcontroller有一個文本字段,其值來自上一個屏幕的行。現在我點擊文本框並編輯它的值,然後按右上角的保存。現在,理想情況下,當我按下保存並轉到上一個屏幕時,現在應該在tableview中看到編輯的值,而不是舊的值。

但是,當我按下保存並返回到上一個屏幕時,我所做的暫時看到tableviewcontroller中的更新值。但實際上,該值在覈心數據中增加了兩次,當我從這個tableview返回到另一個視圖並返回時,我不僅看到編輯前存在的值,而且還看到新編輯的值是加了兩次!我無法理解這種行爲....

在點擊編輯畫面此保存按鈕是我在做什麼...

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "save" { 
      editedModel = editTextField.text 
    } 
} 

在回來的表視圖屏幕上,這是我在做什麼......(在tableviewcontroller屏幕)

@IBAction func saveToMainEditViewController (segue:UIStoryboardSegue) { 
    let detailViewController = segue.source as! EditCategoriesTableViewController 
    let index = detailViewController.index 
    let modelString = detailViewController.editedModel //Edited model has the edited string 

    let myCategory1 = Category(context: self.context) 
    myCategory1.categoryName = modelString 
    mangObjArr[index!] = myCategory1  

    //Saving to CoreData 
    guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { 
     return 
    } 
    let managedContext = appDelegate.persistentContainer.viewContext 
    let entity = NSEntityDescription.entity(forEntityName: "Category", in: managedContext) 
    let category = NSManagedObject(entity: entity!, insertInto: managedContext) 

    category.setValue(myCategory1.categoryName, forKeyPath: "categoryName") 
    category.setValue(myCategory1.categoryId, forKey: "categoryId") 
    do { 

     try managedContext.save() 
    } catch let error as NSError { 
     print("Could not save. \(error), \(error.userInfo)") 
    } 
    categoryTableView.reloadData() 

} 

在的cellForRowAtIndexPath,這是我在做什麼...

let cell = tableView.dequeueReusableCell(withIdentifier: "categoryCell", for: indexPath) 

    let person = mangObjArr[indexPath.row] 
    cell.textLabel?.text = person.categoryName 
    return cell 

回答

0

在插入類別實體之前,您正在插入新記錄而不是更新以前的一個
,編寫一段用當前名稱獲取記錄的代碼,然後將其當前名稱替換爲編輯後的字符串,然後保存。
此代碼獲取記錄與舊名稱,並用一個新的

let fetchRequest : NSFetchRequest<Category> = Category.fetchRequest() 
fetchRequest.predicate = NSPredicate(format: "(categoryName == %@)", argumentArray: [*Your current categoryName*]) 
do { 
    let result = try managedContext.fetch(fetchRequest) 
    if let toBeUpdatedRecord = result.first 
    { 
     toBeUpdatedRecord.categoryName = newName 
     //here you should save 
    } 
} catch{} 
+0

確定.. @雅典娜取代它的名字......所以我在哪裏,包括這些行..? –

+0

在這一行let result =嘗試managedContext.fetch(fetchRequest),我得到的結果爲零。任何想法..? –

+0

是您的managedContext對象是否正確啓動?如果是這樣,結果爲零的提取請求可能意味着沒有找到記錄。 – Athena