2017-02-24 109 views
0

我發佈了一個類似的帖子,但我的問題有一半的答案。我希望能夠刷卡刪除行,然後將該數據保存到我的xcdatamodeld文件。我在xcdatamodeld中有一個名爲removeTask的屬性,但是就我而言。任何幫助表示讚賞保存已刪除的行核心數據錯誤 - Swift 3

//Removing Tasks 
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 
    if editingStyle == UITableViewCellEditingStyle.delete { 

     // 1) 
     let task = tasks.remove(at: indexPath.row) 

     // 2) 
     saveToCoreData(task: task) 

     // 3) 
     tableView.beginUpdates() 
     tableView.deleteRows(at: [indexPath], with: .fade) 
     tableView.endUpdates() 
    } 
} 



func saveToCoreData(task: Task) { 

    do { 
     try managedObjectContext.save() 
    } catch { 
     fatalError("Failure to save context: \(error)") 
    } 
} 

回答

3

你要刪除的數據源陣列在覈心數據中的對象堆棧:

// 1) 
let task = tasks.remove(at: indexPath.row) 
managedObjectContext.delete(task) 

// 2) 
saveToCoreData(task: task) 

// 3) 
tableView.deleteRows(at: [indexPath], with: .fade) 

旁註:

  • 單個刪除操作完全不需要。
0
// Insert Into CoreData (very important) 
let managedObject = NSEntityDescription.insertNewObject(forEntityName: "removedTask", into: self.managedObjectContext) 

// assign values 
managedObject.value = task.value 

這些操作是歧義的來源。
當從commit editingStyle:調用saveToCoreData時,它的唯一目的是將上下文中所做的更改傳遞給持久性存儲。
通過執行NSEntityDescription.insertNewObject,上下文中創建了一個新對象,這絕對不是此處的意圖。

修改saveToCoreData如下將幫助:

func saveToCoreData(task: Task) { 

    do { 
     try managedObjectContext.save() 
    } catch { 
     fatalError("Failure to save context: \(error)") 
    } 

    // for updating tasks array with the latest data set 
    let tasksFetch = NSFetchRequest(entityName: "Task") // "Task" or whatever is the actual name of entities stored in tasks array 

    do { 
     tasks = try managedObjectContext.executeFetchRequest(tasksFetch) as! [Task] 
    } catch { 
     fatalError("Failed to fetch task: \(error)") 
    } 
} 
+0

嗨,我修改了我的_saveToCoreData_,但是當我刪除該行後,它會在我切換視圖後回來,然後回到主視圖。有任何想法嗎? @ystack –

+0

@LukeRoberts確保使用最新更改更新用於填充表的數組(或字典)。基本上,在滑動刪除並保存到上下文後,您還需要執行數據庫獲取請求以獲取最新內容。這個獲取請求應該用來更新表使用的數組。 – ystack

+0

我有點不確定如何做到這一點...我會更新問題。對不起@ystack –