【Swift/Realm】「Object has been deleted or invalidated.」エラーの原因と解決方法

【Swift/Realm】「Object has been deleted or invalidated.」エラーの原因と解決方法

この記事からわかること

  • Realm Swift発生したエラー解決方法
  • Object has been deleted or invalidated.原因とは?

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

Object has been deleted or invalidated.とは?

Realmを使用してiOSアプリ開発時に「Object has been deleted or invalidated.」というエラーが以下のようなアプリコード条件で発生しました。

発生したエラー

Object has been deleted or invalidated.

発生環境

public func readAllBooks() -> [Book] {
    let books = realm.objects(Book.self)
    return Array(books)
}

@ObservedResultsなどを使えばそもそも配列などに入れ替える必要はないですが今回はあえて配列でいきたかったのです。

発生原因

翻訳

オブジェクトは削除または無効化されました。

調べてみるとこのエラーは存在しなくなったはずのオブジェクトに参照しようとすることで発生するようです。

解決方法

解決方法は取得したRealmResultsオブジェクトをfreezeメソッドを使用して凍結させることでした。

public func readAllBooks() -> [Book] {
    let books = realm.objects(Book.self).freeze()
    return Array(books)
}

@ObservedResultsで取得したインスタンスも凍結されているのでアプリ内で操作する際はfreezeメソッドを使用して凍結させると良さそうです。

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index