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

Can't delete Realm database objects from another thread (even after searching)

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

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

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

NSArray *samples = [someClass getMySamplesFromRealm];

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

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 accessed from incorrect thread" 现在,我假设这是因为当我 运行 Diagnostic objectForPrimaryKey: 时,它是试图使用与 *diagnostic 对象关联的领域,该对象是在另一个线程上创建的。

我的问题是:如果我不能通过查看它们来弄清楚它们是哪个个特定对象,我到底该如何删除这些特定对象?

任何 clarification/advice 将不胜感激。

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