我的應用程序中存在這個問題,即從我的數據庫中刪除大量數據需要很長時間。所以我開始調試,發現變壓器是問題所在!瞭解CoreData中變形的錯誤
要看到我創建的隔離問題的一個項目...
的問題,我有以下幾點:
+-----------+ +-----------+
| Entity A | | Entity B |
+-----------+ +-----------+
| | | property |
| b | 1:1 | a |
+-----------+ +-----------+
所以Entity A
有一個1:1的關係Entity B
。並且Entitiy B
有一個名爲property
的屬性,它是Transformable並具有ValueTransformer。 A到B的刪除規則無效。
現在我創建一個A和B的實例,將它們鏈接起來並寫入屬性。保存上下文,一切按預期工作。
現在我想刪除Entity A
的所有對象。我創建一個提取請求,並刪除所有實體。在我的示例我這樣做,像這樣:
context.perform {
let fetchRequest = NSFetchRequest<EntityA>(entityName: "EntityA")
guard let allEntities = try? context.fetch(fetchRequest) else { return }
for entity in allEntities {
context.delete(entity)
}
try? context.save()
}
現在時保存情況,值變壓器reverseTransformedValue
被調用。我不明白爲什麼?!?因爲我不訪問該屬性...我沒有設置或得到它...
如果有人能爲我擺脫一些光,會很酷。
我也有可以在這裏找到我的樣本項目:https://www.dropbox.com/s/651dmyughosr90p/ValueTransformerIssue-Sample.zip?dl=0
你好,湯姆,很高興再次讀你:) 我想你是對的,那關係的問題就是問題。 在我的真實應用程序(這裏不只是這個示例),我已經有一個單獨的實體,其中包含價值可轉換數據。只是數據而沒有別的,因爲錯誤加載了一切。另一個問題是這些數據很大。它是您記錄的活動的GPS數據。 我想最好的解決方案是將它們寫入一個文件,並且只是從核心數據中引用它們,我猜?!? 我也看了一下'NSBatchUpdateRequest',但是因爲我有...... – Georg
......相當一些關係太過痛苦才能得到正確的......我想我只需要找到一種更好的方式來存儲我的數據,因爲在SQL中有這麼多的二進制文件不是一個好主意...... 我會等待更多的接受你的答案,以防萬一奇蹟發生,有人有一個超級簡單的解決方案......但非常感謝你很多爲您的詳細答案! – Georg
@Tom我認爲NSBatchDeleteRequest確實遵守刪除規則 - 只是不自定義驗證? – pbasdf