CoreData利用時のNSManagedObject内メソッド呼び出し時に起こるEXC_BAD_ACCESS
JSONとCoreDataの連携について下記サイトのサンプルコード(Swift-3)を元にプログラムを書いています.
http://docs.fabo.io/swift/coredata/001_json.html
let wordDatas: Words = Words(entity: entity, insertInto: context)
do {
try wordDatas.updateFromDictionary(dataDictionary: jsonData as! [String : Any])
} catch {
print("Error updateFromDictionary:\(error)")
}
内容はJSONファイルを読み込みCoreDataへ保存するコードです.
問題の箇所は上記の部分で,(サンプルより変数名等が違うだけのものですが)3行目のメソッド呼び出しの行でEXC_BAD_ACCESSが出て異常終了してしまいます.
Wordsクラスの中身も(これも変数名が違うだけですが)下記に示しておきます.
@objc(Words)
public class Words: NSManagedObject {
@NSManaged var id: NSNumber
@NSManaged var english: String
@NSManaged var japanese: String
func updateFromDictionary(dataDictionary: [String: Any]) throws {
// バリデーション.
guard let tmp_id: NSNumber = dataDictionary["id"] as? NSNumber,
let tmp_english: String = dataDictionary["english"] as? String,
let tmp_japanese: String = dataDictionary["japanese"] as? String
else{
throw NSError(domain: "Failed validation of JSON object. ", code: -1, userInfo: nil)
}
// データを反映.
id = tmp_id
english = tmp_english
japanese = tmp_japanese
}
}
jsonDataの中身はprintで確認した所,うまくJSONファイル内の1行目のテーブルを読み込めているようでした.
EXC_BAD_ACCESSのよくある原因としては解放済みのオブジェクトへアクセスした場合などのようですが,インスタンスを生成した直後にも関わらずこのような現象が起きてしまい悩んでおります.