gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 18:58:16 24 4
gpt4 key购买 nike

我遇到了与此帖中发帖人类似的问题: 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com