当我的用户退出时,我会使用realm.deleteAll()
清除我的领域。在此之后,我收到大量通知,导致Results
个对象的读取,导致异常realm::Results::InvalidatedException
,“RLMResults已失效”。
直接检查Results
对象是否失效;
检查Results
'realm
对象是否有效;或
获取List
Results
派生自以便检查其无效状态。
我想不出别的东西要找。如果有更好的方法来清除数据库,不会导致异常,我也很高兴听到这个。
其他信息:即使在count
对象上调用Results
,也会抛出异常,而不仅仅是访问其对象。
答案 0 :(得分:0)
您可以从Swift Docs中检查第一个对象是否存在:
public var first: T? { return rlmResults.firstObject() as! T? }
返回结果中的第一个对象,如果为空,则返回nil。
从Realm Documentation for Java(在Swift Docs中找不到相同的措辞):
请注意,即使RealmResults不包含任何对象,它也永远不会为null。您应该始终使用size()方法来检查RealmResults是否为空。
长话短说,检查第一个对象是否存在或尝试计算元素。
来源:
Swift - Results Class Reference
编辑:这是一个代码示例,它取自Realm示例并根据我的需要进行修改,他们使用通知令牌来检测数组是否为空
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()清除表:
func clearTable() {
try! realm.write {
realm.deleteAll()
}
}
答案 1 :(得分:0)
Results
现在有一个invalidated
属性,从1.0.3开始。
来源:https://github.com/realm/realm-cocoa/blob/v0.103.0/CHANGELOG.md