2016-10-07 77 views
20

有沒有辦法批量刪除存儲在覈心數據中所有實體中的所有數據?在Swift 3中刪除核心數據實體中的所有數據

我在iOS 9或10的某處讀到蘋果介紹了一種批量刪除的方法,但我似乎無法找到任何有用的信息。

最終,我只需要一個通過實體的函數,並刪除其中的所有數據。看起來它應該很簡單,但是它的文檔/教程已經證明非常難以找到。

有什麼想法?

編輯

我添加以下代碼附加到按鈕的IBAction爲:

@IBAction func clearAllData(_ sender: AnyObject) { 
    let fetch = NSFetchRequest<NSFetchRequestResult>(entityName: "PLProjects") 
    let request = NSBatchDeleteRequest(fetchRequest: fetch) 

    //get the data from core data 
    getPLData() 

    //reload the table view 
    tableView.reloadData() 
} 

這似乎並不但是工作。如果我關閉該項目並重新打開它,數據仍然存在。我假設這也是爲什麼表視圖不更新,因爲數據實際上並未被刪除。

回答

31

你在想的NSBatchDeleteRequest,這是iOS中加入9創建一個這樣的:

let fetch = NSFetchRequest<NSFetchRequestResult>(entityName: "Employee") 
let request = NSBatchDeleteRequest(fetchRequest: fetch) 

您還可以添加一個斷言,如果你只是想刪除匹配謂詞實例。運行請求:

let result = try managedObjectContext.executeRequest(request) 

請注意,批處理請求不會更新您當前的任何應用程序狀態。如果您在內存中管理受刪除影響的對象,則需要立即停止使用它們。

+0

我編輯我的職務,以表明我使用的代碼 - 但似乎並沒有爲我工作。基本上我有一個UITableView加載到我的視圖控制器中,並且我在一個名爲「PLProjects」的實體中顯示所有「項目」。我在屏幕上還有一個按鈕實例,並且與它關聯的IBAction。我評論中的更新顯示了該IBAction中的代碼 - 未能從Core Data Entity中刪除項目,也未能更新表格。 –

+0

創建請求是不夠的。你也必須執行它。請求不會自動運行,它們會在您告訴它們運行時運行。 –

+0

啊,對不起。我誤解了你最初發布的內容。我認爲代碼的第二部分是添加一個謂詞。所以 - 就這麼說 - 在第二個片段中,什麼是「moc」? –

19

爲了充實湯姆的答覆,這是我加有一個完整的程序:

func deleteAllRecords() { 
    let delegate = UIApplication.shared.delegate as! AppDelegate 
    let context = delegate.persistentContainer.viewContext 

    let deleteFetch = NSFetchRequest<NSFetchRequestResult>(entityName: "CurrentCourse") 
    let deleteRequest = NSBatchDeleteRequest(fetchRequest: deleteFetch) 

    do { 
     try context.execute(deleteRequest) 
     try context.save() 
    } catch { 
     print ("There was an error") 
    } 
} 
+0

不應該使用委託變量來聲明上下文嗎? – MrAn3

相關問題