- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 Realm for Swift 并将数据加载到 UITableView 中。当我进入屏幕时,大约有 200 个数据对象正在逐渐下载,因此在显示 tableview 之后,我的测试中发生了很多插入 UITableView 的事情。我正在尽可能接近地使用 Realm 示例将 addNotificationBlock 与 RealmCollectionChange 结合使用,在此过程中偶尔会发生两次独立的崩溃。
即使我特意从我的 ViewController 类中的主线程中提取所有数据,也会发生此崩溃。
这个崩溃是在我更换后才开始发生的
tableView.reloadData()
与
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()
在我的 addNotificationBlock 的 .Update() 部分
我是否遗漏了导致此问题的 Realm 的某些内容?我怀疑这是因为我没有完全理解这个库的内部机制。
这是我的引用代码:
self.exhibits = DataManager.getAllExhibitsSorted("id")
token = self.exhibits?.addNotificationBlock { (changes: RealmCollectionChange) in
switch changes {
case .Initial(_):
self.exhibits = DataManager.getAllExhibitsSorted("id")
self.exhibitListTableView.reloadData()
break
case .Update(_, let deletions, let insertions, let modifications):
// Query results have changed, so apply them to the UITableView
self.exhibitListTableView.beginUpdates()
self.exhibitListTableView.insertRowsAtIndexPaths(insertions.map { NSIndexPath(forRow: $0, inSection: 0) },
withRowAnimation: .Automatic)
self.exhibitListTableView.deleteRowsAtIndexPaths(deletions.map { NSIndexPath(forRow: $0, inSection: 0) },
withRowAnimation: .Automatic)
self.exhibitListTableView.reloadRowsAtIndexPaths(modifications.map { NSIndexPath(forRow: $0, inSection: 0) },
withRowAnimation: .Automatic)
self.exhibitListTableView.endUpdates()
break
case .Error:
NSLog("Error in notificationBlock")
break
}
}
最佳答案
听起来你可能把这里的事情复杂化了一点。
Realm Results
对象是实时的并且会自动更新。这意味着对其基础对象所做的更改会在主运行循环的下一次迭代中自动更新,因此无需对它们执行手动重新获取。在您的代码中,您正在 .Initial
更改通知中重新分配 self.exhibits
,生成 token 后,这可能会导致您的一些问题这里。如果您删除该行,它应该会继续工作。
我建议检查您的代码,并确保 self.exhibits
仅被分配一次,并且更改通知方法仅应用于该代码。
如果这不能解决问题,请告诉我。
关于ios - addNotificationBlock { RealmCollectionChange } 在 UITableView 中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38018213/
我一直在尝试设置 Realm 数据库,到目前为止一切正常。现在我正在尝试创建通知 token 以跟踪我的 Realm 中的更改,addNotificationBlock 方法返回以下错误: Error
我有一段在空列表上崩溃的小代码,但是当列表实际上是从 Object 子类 PopContact 中获取时工作正常知道为什么会崩溃吗? class Item: Object { } class Cont
我正在一个 IOS 应用中使用 swift 和 realm。 我尝试使用 realm.addNotificationBlock 重新加载 tableView。但我不知道如何实现这一点。有人可以帮我提供
有没有办法配置 Realm 以便同步触发通知回调(使用 addNotificationBlock 注册)?特别是,我希望在测试中出现这种行为。 由于回调是异步的,因此不能在测试中使用。因此,有必要在生
我正在尝试使用 .addNotificationBlock Swift Realm 中的方法。我有其他方法,但实际上不是这个(看图像)。为什么? let realm = RealmService.sh
我正在使用 Realm for Swift 并将数据加载到 UITableView 中。当我进入屏幕时,大约有 200 个数据对象正在逐渐下载,因此在显示 tableview 之后,我的测试中发生了很
我是一名优秀的程序员,十分优秀!