首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从包含非托管对象的错误线程访问的领域

从包含非托管对象的错误线程访问的领域
EN

Stack Overflow用户
提问于 2019-11-14 09:21:57
回答 1查看 89关注 0票数 0

领域文档说T(value: Any)创建一个非托管对象,这样的对象在不同的线程中没有问题,这是怎么回事?

代码语言:javascript
运行
复制
func getOne<T : Object>(type : T.Type) -> Promise<T> {
        return Promise { seal in
            self.operatingQueue.async {
                autoreleasepool {
                    if let realm = self.openRealm() {

                        let results = realm.objects(T.self)

                        if let first = results.first {
                            let unmanaged : T = T(value: first, schema : .partialPrivateShared())
                            seal.fulfill(unmanaged)
                        }

                    } else {
                        seal.reject(PersistanceError.couldNotOpenDatabase)
                    }
                }
            }
        }
    }

此代码崩溃,并显示以下代码:

代码语言:javascript
运行
复制
2019-11-13 20:08:51.259420-0500 CommonStock[6395:131786] *** Terminating app due to uncaught exception 'RLMException', reason: 'Realm accessed from incorrect thread.'
*** First throw call stack:
(
0 CoreFoundation 0x00007fff23baa1ee _exceptionPreprocess + 350
1 libobjc.A.dylib 0x00007fff50864b20 objc_exception_throw + 48
2 Realm 0x000000010b69e11b ZN12_GLOBAL__N_114translateErrorIZ13RLMDynamicGetE3$5EEDaOT + 155
3 Realm 0x000000010b69dfdc RLMDynamicGet + 284
4 Realm 0x000000010b69e57d RLMDynamicGetByName + 1053
5 RealmSwift 0x000000010d6c2f44 $s10RealmSwift6ObjectCyypSgSScig + 708
6 RealmSwift 0x000000010d6c2b82 $s10RealmSwift6ObjectCyypSgSScigTo + 98
7 Realm 0x000000010b71ad1a -[RLMObjectBase descriptionWithMaxDepth:] + 714
8 Realm 0x000000010b6d4f7d RLMDescriptionWithMaxDepth + 1101
9 RealmSwift 0x000000010d6b4a27 $s10RealmSwift8ListBaseC23descriptionWithMaxDepth33_027551CC6B6B2DBBB6CF4A740CB6E5D6LLySSSuF + 247
10 RealmSwift 0x000000010d6b4bd0 $s10RealmSwift8ListBaseC23descriptionWithMaxDepth33_027551CC6B6B2DBBB6CF4A740CB6E5D6LLySSSuFTo + 48
11 Realm 0x000000010b71adc5 -[RLMObjectBase descriptionWithMaxDepth:] + 885
EN

回答 1

Stack Overflow用户

发布于 2019-11-14 09:32:45

错误不是抱怨你的对象,而是抱怨你的Realmself.openRealm()的代码实际上是做什么的,为什么这是一个实例方法?你有没有试着用一个普通的let realm = try? Realm()替换它。您可以从另一个线程访问一个realm,但需要为该线程实例化一个Realm对象;您不能在线程上使用与创建线程的Realm实例不同的Realm实例。我猜您是在一个线程上创建并持久化Realm,然后尝试在另一个线程上使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58848020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档