【问题标题】:how to solve 'Object has been deleted or invalidated.' Realm exception如何解决“对象已被删除或失效。”领域异常
【发布时间】:2016-08-05 19:41:14
【问题描述】:

我在不同的 ViewControllers 中有不同的领域对象,并且从我的 settingViewController 我删除了应用程序的所有数据(领域存储的对象)它工作正常但是当我回到那些视图控制器时我得到了这个异常:

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)不知道我已经删除了那些领域对象并且系统正在尝试使用不再存在的数据(如果我错了,请纠正我),任何人都可以指导我如何解决这个问题???

【问题讨论】:

  • 在您仍在访问 Realm 文件时删除它会导致类似这样的坏事。我建议您在删除文件之前停止访问 Realm。
  • @jpsim 谢谢你的回复,你能详细说明一下怎么做吗?
  • 要停止访问 Realm,您需要解除分配由该 Realm 中的数据支持的所有实例。这意味着RealmObjectResultsListsLinkingObjects,以及停止任何可能仍在监听更改的通知。您可能需要阅读 ARC 和 autoreleasepools 以了解有关如何执行此操作的更多信息:developer.apple.com/library/ios/documentation/Swift/Conceptual/…

标签: ios swift2 realm


【解决方案1】:

我建议您在将所有数据删除到所有使用它进行操作的视图控制器之前发出通知:

  1. 在擦除之前从您的 settingViewController 推送通知
  2. 在您需要清除对象的任何地方订阅此内容。
  3. 删除引用
  4. 在您的 settingViewController 中执行 clean。

或者,其他方式 - 为您的目的实现委托模式。思路是一样的。

希望这会有所帮助。

【讨论】:

  • 嘿,谢谢您的回复,您知道与此相关的任何教程吗?关于你的第一个选择,因为我知道该怎么做,但不知道该怎么做
  • @remyboys,我认为 realm.io/docs/swift/latest/#realm-notifications 是您正在搜索的内容
猜你喜欢
  • 2015-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-08
相关资源
最近更新 更多