Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何检查RLMResults是否无效?_Ios_Swift_Realm_Realm Cocoa - Fatal编程技术网

Ios 如何检查RLMResults是否无效?

Ios 如何检查RLMResults是否无效?,ios,swift,realm,realm-cocoa,Ios,Swift,Realm,Realm Cocoa,当我的用户注销时,我使用realm.deleteAll()清除我的领域。在此之后,我收到大量通知,导致从结果对象读取,这导致异常领域::结果::无效异常,“RLMResults已无效”。我找不到一条路去 直接检查结果对象是否失效 检查结果”领域对象是否无效;或 获取列表导出的结果,以检查其无效状态 我想不出还有什么可以找的了。如果有更好的方法来清除数据库,而不会导致各地出现异常,我也很高兴听到这个消息 附加信息:即使在对结果对象调用计数时,也会引发异常,而不仅仅是访问其对象。您可以从Swif

当我的用户注销时,我使用
realm.deleteAll()
清除我的领域。在此之后,我收到大量通知,导致从
结果
对象读取,这导致异常
领域::结果::无效异常
,“RLMResults已无效”。我找不到一条路去

  • 直接检查
    结果
    对象是否失效

  • 检查
    结果
    领域
    对象是否无效;或

  • 获取
    列表
    导出的
    结果
    ,以检查其无效状态

我想不出还有什么可以找的了。如果有更好的方法来清除数据库,而不会导致各地出现异常,我也很高兴听到这个消息


附加信息:即使在对
结果
对象调用
计数
时,也会引发异常,而不仅仅是访问其对象。

您可以从Swift文档中检查第一个对象是否存在:

public var first: T? { return rlmResults.firstObject() as! T? }
返回结果中的第一个对象,如果为空,则返回nil

来自Java领域文档(在Swift文档中找不到相同的措辞):

请注意,RealmResults从不为null,即使它不包含任何对象。您应该始终使用size()方法检查RealmResults是否为空

长话短说,检查第一个对象是否存在或尝试计数元素

资料来源:

,

编辑:这是一个代码示例,它取自领域示例并根据我的需要进行了修改,它们使用通知令牌来检测数组是否为空

class Record: Object {
  dynamic var workoutName  = ""
  dynamic var totalTime    = ""
  dynamic var date         = ""
}
  let realm = try! Realm()
  let array = try! Realm().objects(Record).sorted("date")

  var notificationToken: NotificationToken?

  override func viewDidLoad() {
    super.viewDidLoad()

    setupUI()

    // Set results notification block

    notificationToken = array.addNotificationBlock { [weak self] (changes: RealmCollectionChange) in
      guard let tableView = self?.tableView else { return }
      switch changes {
      case .Initial:
        // Results are now populated and can be accessed without blocking the UI
        tableView.reloadData()
        break
      case .Update(_, let deletions, let insertions, let modifications):
        // Query results have changed, so apply them to the UITableView
        tableView.beginUpdates()
        tableView.insertRowsAtIndexPaths(insertions.map { NSIndexPath(forRow: $0, inSection: 0) },
          withRowAnimation: .Automatic)
        tableView.deleteRowsAtIndexPaths(deletions.map { NSIndexPath(forRow: $0, inSection: 0) },
          withRowAnimation: .Automatic)
        tableView.reloadRowsAtIndexPaths(modifications.map { NSIndexPath(forRow: $0, inSection: 0) },
          withRowAnimation: .Automatic)
        tableView.endUpdates()
        break
      case .Error(let error):
        // An error occurred while opening the Realm file on the background worker thread
        fatalError("\(error)")
        break
      }
    }
  }
我还使用deleteAll()清除表:


Results
从1.0.3开始,现在有一个
invalidated
属性


来源:

结果
对象上调用
计数
时会发生异常,所以我不认为是这样。再说一遍,我不是在找空的,我是在找无效的。当通知触发时,我重新加载我的表视图,不管其中有什么;检查
count
会引发异常。我认为这是
结果
API不足的情况。你能提到这个缺陷吗。谢谢,@bdash
  func clearTable() {
    try! realm.write {
      realm.deleteAll()
    }
  }