【问题标题】:Realm Swift: how to catch RLMException?Realm Swift:如何捕获 RLMException?
【发布时间】:2016-08-29 02:05:23
【问题描述】:

我以为我做得对。

let realm = try! Realm()
do {
    try realm.write {
        realm.add(myObject)
    }
} catch {
    print("something went wrong!")
}

但我仍然遇到崩溃而不是打印语句。我对避免异常不感兴趣(在这种情况下,我故意通过添加具有现有主键的对象来引起它)但我希望能够捕获它并无论如何防止崩溃。这可能吗?如果可以,怎么做?

【问题讨论】:

标签: ios swift realm


【解决方案1】:

Realm Swift 只对被认为是程序员错误的事情抛出 Objective-C 异常。这些异常并不打算在运行时被捕获和处理,因为它们表明程序中存在必须修复的错误。

【讨论】:

  • 违反先决条件是程序员错误的一个例子。另一类错误是运行时错误。这些错误即使使用正确编写的代码也可能发生,并且必须在运行时处理(即,找不到文件、磁盘空间不足等)。
  • 主键的文档声明它们必须是唯一的。
  • 是的,它说它必须是独一无二的。文档中没有任何关于写入的内容。我检查了writeadd。如果人们按照您的逻辑行事,则不会出现运行时错误。文件在被访问之前应该被搜索。写入文件前应检查磁盘空间。
  • 将其与 Apple 文档进行比较:A call to this function must balance a call to enter(). It is invalid to call it more times than enter(), which would result in a negative count. 明确指出某些内容无效。
  • 如果您对 Realm 的文档不满意,请务必向他们提出问题。你错了,程序员错误(违反前置条件、API 滥用等)和运行时错误之间没有区别。在您采取行动之前,不可能安全地检查文件是否存在或磁盘空间,因为您观察到的任何状态都可能在您采取行动之前发生变化,从而无法避免运行时错误。
猜你喜欢
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
  • 2015-06-08
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
  • 1970-01-01
  • 2016-12-17
相关资源
最近更新 更多