我遇到与此主题中的海报类似的问题: Unable to delete an object in a realm database
我有一个RLMObject子类数组,这些子类是通过搜索名为' syncQueue'的队列创建的。它是一堆需要发送到服务器的诊断对象。
这些对象被打包并使用Google Client Library for iOS发送到服务器。一旦库返回对象已成功上载,我想从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从错误的线程访问" 现在,我认为这是因为当我运行Diagnostic objectForPrimaryKey:
时,它&#39 ; s尝试使用与在另一个线程上创建的*diagnostic
对象关联的领域。
我的问题是:如果我不能查看它们以找出它们所属的具体对象,我可以在地球上删除这些特定对象吗?
非常感谢任何澄清/建议。
答案 0 :(得分:4)
最好的方法可能是将主键传递给新线程,而不是对象。