ios - 无法从另一个线程中删除 Realm 数据库对象(即使在搜索之后)

标签 ios realm

我遇到了与此帖中发帖人类似的问题: Unable to delete an object in a realm database

我有一组 RLMObject 子类,这些子类是通过搜索名为“syncQueue”的队列创建的。它是一堆需要发送到服务器的诊断对象。

这些对象被打包并使用 Google Client Library for iOS 发送到服务器.一旦库返回对象已成功上传,我想将它们从 Realm 中删除。我从 Realm 中抓取了一些样本。

NSArray *samples = [someClass getMySamplesFromRealm];

所以现在我有一组样本。 ^^这发生在“syncQueue”上,它使用自己的线程。仍然在同一个线程上,我们打包并上传示例。所以有一个看起来像这样的回调 block :

GTLServiceTicket *ticket = [service executeQuery:query completionHandler:^(GTLServiceTicket *ticket, id object, NSError *error)
    {
        [syncHandler removeTicket:ticket];
        if( error )
        {
            // Handle Error
        }
        else
        {
            [diagDataAccessManager deleteObjects:samples];
        }
    }];

下面是删除这些对象的代码。

1  - (void)deleteObjects:(NSArray *)samples
2  {
3      if (samples.count > 0) 
4      {
5          [[RLMRealm defaultRealm] beginWriteTransaction];
6          for (Diagnostic *diagnostic in samples) 
7          {
8              Diagnostic *diagnosticToDelete = [Diagnostic objectForPrimaryKey:diagnostic.primaryId];
9              [[RLMRealm defaultRealm] deleteObject:diagnosticToDelete];
10         }
11         [[RLMRealm defaultRealm] commitWriteTransaction];
12     }
13     
14 }

所以我尝试在删除之前进行搜索。然而……

在第 8 行,我得到一个异常:“从不正确的线程访问的 Realm ” 现在,我假设这是因为当我运行 Diagnostic objectForPrimaryKey: 时,它试图使用与在另一个线程上创建的 *diagnostic 对象关联的 Realm 。

我的问题是:如果我无法通过查看这些特定对象来确定它们是哪些特定对象,我到底该如何删除它们?

如有任何澄清/建议,我们将不胜感激。

最佳答案

最好的办法可能是将主键而不是对象传递给新线程。

关于ios - 无法从另一个线程中删除 Realm 数据库对象(即使在搜索之后),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29423859/

相关文章:

iphone - 我可以在 ios 应用程序中的 NSMainBundle 中创建文件吗?这段代码的含义是什么?

ios - 是否建议为只读合成属性定义 ivars?

ios - swift 3 :Closure use of non-escaping parameter may allow it to escape

ios - 我正在尝试更新 GCD 中的 Realm 对象,但是当我的代码运行时,它会因错误而崩溃,如下所示

android - Realm 和独特的对象

ios - 为什么我的应用程序没有列出我的设置?

ios - 这个应用程序如何立即请求后台位置权限?

android - 基于动态类型获取 Realm 数据

swift - Realm 的写事务

android - Json 字符串到 Realm 对象,最快的方法