1

我对 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 方法的最后一行。

我知道当我尝试重新加载集合时会出现问题,因为如果我不从远程请求报价,它会完美运行。

会发生什么?

问候

编辑:回溯

https://i.stack.imgur.com/zsKpg.png

http://pastebin.com/eY7VUmvE

4

0 回答 0