‘NSInvalidArgumentException’, reason: ‘keypath XXXX not found in entity ‘ というエラー

CoreDataを用いて保存したデータの削除を行うときに起きたエラー。
削除するのが原因で起きたというよりは、NSPredicateを使ったことで起きたエラーです。

‘NSInvalidArgumentException’, reason: ‘keypath XXXX not found in entity

環境

Swift 4.2
Xcode 10.1

原因と解決方法

NSPredicateの引数の文法が間違っていました。

let predicate = NSPredicate(format: "%K = %K", "name", word.name)

こんな感じに削除するデータを指定していたのですが、この部分が間違いでした。

正しくは以下の通り。

let predicate = NSPredicate(format: "%K = %@", "name", word.name)

「%K」というのは置き換えられた後に変数としてみなされるもので、「%@」は置き換えられた後に文字列としてみなされ、ダブルクォーテーションが付けられるものです。
「%K」と「%@」が少しややこしいので間違えないようにしなければなりませんね。

コメント