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()
}
}