我对 Realm 上的 Results 对象有一些问题。我有一个“Offer”类型的集合,在三个不同的视图控制器中,我根据 Offer 属性对 Offer Realm 集合有三个不同的查询。每个用户的“优惠”对象都不同,因此,当用户注销时,我会清除所有会话数据,包括此集合。
当用户再次登录(关闭应用程序或不关闭应用程序)时,所有集合都重新加载,我收到此异常:
malloc: *** error for object 0x208a7614: incorrect checksum for freed object - object was probably modified after being freed.
我重新加载每个集合的方式是:
首先,如果本地数据库上有可用的报价,我会加载它们。
之后,我从远程请求报价,当我收到它们时,我从本地删除所有并添加所有新的。
最后,我将它们保存在 Realm 上,我从 Realm 接收变更集(使用 RxRealm)并在 CollectionView 上进行所有更改(使用performBatchUpdates)。
重新加载后我在 Realm 上进行“交换”的方式是:
do{
try realm.write(){
realm.delete(andRemove)
realm.add(offers, update: true)
}
}
ChangeSet 是这样应用的:
func applyChangeset(deleted:[Int], inserted:[Int], updated:[Int], animationStyle:UITableViewRowAnimation = .automatic) {
self.performBatchUpdates({
self.deleteItemsAtIndexPaths(deleted.map { IndexPath(row: $0, section: 0) }, animationStyle: animationStyle)
self.insertItemsAtIndexPaths(inserted.map { IndexPath(row: $0, section: 0) }, animationStyle: animationStyle)
self.reloadItemsAtIndexPaths(updated.map { IndexPath(row: $0, section: 0) }, animationStyle: animationStyle)
}, nil)
}
下面的异常出现在 applyChangeset 方法的最后一行。
我知道当我尝试重新加载集合时会出现问题,因为如果我不从远程请求报价,它会完美运行。
会发生什么?
问候
编辑:回溯