无法从另一个线程中删除 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 将不胜感激。
最好的办法可能是将主键而不是对象传递给新线程。
我遇到了与此帖中发帖人类似的问题: 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 将不胜感激。
最好的办法可能是将主键而不是对象传递给新线程。