【发布时间】:2016-11-28 14:38:03
【问题描述】:
我想在后台线程中刷新 Realm 数据库,如下所示: (因为我从 Webservice 得到了新鲜的数据)
RLMRealm *realm = [RLMRealm defaultRealm];
[realm beginWriteTransaction];
[realm deleteAllObjects]; // !!
[Pubs createOrUpdateInRealm:[RLMRealm defaultRealm] withJSONArray:data];
[realm commitWriteTransaction];
问题是,在我删除和更新 Realm db 中的对象的同时,用户可以打开一些 Detail ViewController 指向同时已被删除的某个 Realm 对象(Pubs),因此引发异常。
我没有看到任何解决方案,除非我想从 Detail 控制器或其属性访问 Realm 对象时,我总是需要这样做:
(这意味着总是获取 Realm 对象,但这也可能失败)
pub = [Pubs objectsWhere:[NSString stringWithFormat: @"pubId = %lu", (long)_selectedPubId]].firstObject;
但我没有使用这个解决方案。我想最好的办法是我可以在细节视图控制器中调用这样的东西:
pub = [Pubs objectsWhere:[NSString stringWithFormat: @"pubId = %lu", (long)_selectedPubId]].firstObject;
pub = [pub safeCopy];
所以可以同时删除PubRealmObject,但pub对象会单独存在于内存中(仅用于访问其数据属性)。
那么有人尝试过类似的方法吗?
或者甚至可能使用一些 iOS SDK 方式like this?
如我所说,我只需要访问数据属性,而不是使用领域对象方法操作,例如删除或更新数据库中的对象。
顺便说一句,我试图在主线程中调用 Realm db 的更新,但问题是它需要 5-7 秒(只有 1000 个 JSON 对象),所以它滞后于应用程序。这就是为什么我认为对象的后台更新和安全复制可能会更好。
但我认为即使在复制对象时它也会失败,那么解决方案是什么? (后台更新 vs 安全访问 Realm 对象)
【问题讨论】: