2016-08-05 2 views
1

私は別のViewControllersと私のsettingViewControllerから異なるrealmオブジェクトを持っています。私はapp(realm格納オブジェクト)のすべてのデータを削除していますが、それらのviewControllersに戻ったときに私はこの例外を受け取ります:'オブジェクトが削除または無効化されました。'の解決方法Realm例外

Terminating app due to uncaught exception 'RLMException', reason: 'Object has been deleted or invalidated.' 
*** First throw call stack: 
(0x180c0adb0 0x18026ff80 0x100a13e7c 0x1001bd54c 0x1001be77c 0x1860c288c 0x1860c2c3c 0x185eb78e8 0x185d775b4 0x185eb6d34 0x192375f40 0x185ef1c94 0x192375ccc 0x1001b97ac 0x1001bbe4c 0x1860bf030 0x1860bf198 0x1860ae298 0x1860c3c64 0x185e548c4 0x185d641e4 0x1836f698c 0x1836f15c8 0x1836f1488 0x1836f0ab8 0x1836f0818 0x1836e9ddc 0x180bc0728 0x180bbe4cc 0x180bbe8fc 0x180ae8c50 0x1823d0088 0x185dd2088 0x100121cc8 0x1806868b8) 
libc++abi.dylib: terminating with uncaught exception of type NSException 
(lldb) 

システム(カーネル、iOS)がこれらのレルムオブジェクトを削除したことを知りませんし、システムがもう存在しないデータを使用しようとしているので(私が間違っている場合は修正してください)どのように私はこの問題を解決することができますか?

+0

まだアクセスしている間にレルムファイルを削除すると、このような悪いものになります。ファイルを削除する前に、レルムへのアクセスを停止することをお勧めします。 – jpsim

+0

@jpsim回答してくれた人のおかげで、あなたは私にそれをやる方法を少し詳しく教えてもらえますか? –

+0

レルムへのアクセスを停止するには、そのレルムのデータがバックアップされているすべてのインスタンスの割り当てを解除する必要があります。これは 'Realm'、' Object'、 'Results'、' Lists'、 'LinkingObjects'を意味するだけでなく、変更を聞いている可能性のある通知を停止します。これを行う方法の詳細については、ARCと自動リースプールを参照する必要があります。https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html – jpsim

答えて

2

私はあなたがそれを操作するすべてのビューコントローラにすべてのデータを削除する前に通知を行うことをお勧め:

  1. あなたsettingViewControllerからのプッシュ通知が前
  2. はどこでもあなたがオブジェクトをクリアする必要があり、このに登録ワイプ。
  3. 参照を削除する
  4. あなたのsettingViewControllerでcleanを実行してください。

他の方法では、目的のためにデリゲートパターンを実装します。アイデアは同じです。

これが役に立ちます。

+0

応答するために、これに関連するチュートリアルを知っていますか?あなたの最初のオプションについては、私は何をすべきか考えているので、どうすればいいのか分かりません。 –

+0

@remyboys、私はhttps://realm.io/docs/swift/latest/#realm-notificationsはあなたが探しているものだと思います – Doro

関連する問題