簡體   English   中英

CoreData並發調試和NSManagedObject nativeValueForKey:

[英]CoreData concurrency debugging and NSManagedObject primitiveValueForKey:

我已在我的應用程序中啟用-com.apple.CoreData.ConcurrencyDebug 1 通過正確使用performBlock(andWait):大多數崩潰很容易解決。

但是,訪問托管對象的屬性時有時也會崩潰。 此崩潰不同於通常的__Multithreading_Violation_AllThatIsLeftToUsIsHonor__

相反,這是_PFAssertSafeMultiThreadedAccess_implNSManagedObect primitiveValueForKey: _PFAssertSafeMultiThreadedAccess_impl :內部的崩潰:

0x10626d48e <+190>: movq   0x2b2bbb(%rip), %rsi      ; "managedObjectContext"
0x10626d495 <+197>: movq   %rbx, %rdi
0x10626d498 <+200>: callq  *0x25bd2a(%rip)           ; (void *)0x000000010602a000: objc_msgSend
0x10626d49e <+206>: movq   0x2b4683(%rip), %rsi      ; "primitiveValueForKey:"
0x10626d4a5 <+213>: movq   %rax, %rdi
0x10626d4a8 <+216>: callq  0x106303270               ; _PFAssertSafeMultiThreadedAccess_impl
0x10626d4ad <+221>: jmp    0x10626d3f1               ; <+33>
0x10626d4b2 <+226>: movq   0x2b25cf(%rip), %rsi      ; "retain"
0x10626d4b9 <+233>: movq   0x25bd08(%rip), %r12      ; (void *)0x000000010602a000: objc_msgSend

也有人遇到過嗎? 在我看來,這就像蘋果代碼中的錯誤, primitiveValueForKey:應該負責正確使用NSManagedObjectContext。

這不是Apple代碼中的錯誤。 您不能從創建該線程的線程以外的任何線程訪問NSManagedObject 如果這樣做,則違反了線程包含規則。

崩潰正是這樣。 您正在從一個創建線程之外的線程接觸NSManagedObject

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM