我尝试制作一个后台线程来处理所有领域的交互。我似乎有问题
所以我的方法是定义Socket
realmQueue
我的假设是我尝试在此队列本身上进行每个单独的域交互。
有没有办法弄清楚(除了单步执行代码)Realm期待的线程?
当我尝试将调用包装在
中时,我收到了线程访问错误internal var realmQueue = dispatch_queue_create("DataRecorder.realmQueue",
DISPATCH_QUEUE_SERIAL)
我非常确定在某个地方我访问了错误但我无法跟踪内容。
调试这些线程问题的最佳方法是什么?
答案 0 :(得分:0)
Realm的经验法则是不能在线程之间传递对象,每个线程都有自己的Realm
对象实例。如果您尝试跨线程传递Realm
实例或Object
子类,则会发生异常。
处理将Realm交互移动到新线程的推荐方法是简单地在新线程上重新获取相同的Realm对象,然后从那里更新它。重新获取对象的最简单方法是将其主键传递给线程,并调用objectForPrimaryKey()
来获取它。
最后,虽然对Realm文件的写入阻止了对其他线程的访问,但是读取却没有,因此您希望在使用Realm执行提取时只需要谨慎使用跨线程交互。 :)