什么是 CGSUpdateManager 以及为什么它会抱怨?

What is the CGSUpdateManager and why is it complaining?

我正在处理我的用户界面,试图通过一大堆嵌套的 NSSplitViewControllers、NSTabViewControllers 等来导航我的数据

我有时会收到这些错误警告。我不知道他们从哪里来,甚至不知道去哪里看。该应用似乎运行良好。

什么是 CGSUpdateManager 以及它为什么抱怨?

void CGSUpdateManager::log() const: conn 0xdbbb token 0x2ffffffffffdc78 Backtrace (at 5543.57):
void CGSUpdateManager::log() const:  0   CoreGraphics                        0x00007fff85db9215 CGSBacktraceCreate + 59
void CGSUpdateManager::log() const:  1   CoreGraphics                        0x00007fff85dd8688 _ZN16CGSUpdateManager14disable_updateEv + 84
void CGSUpdateManager::log() const:  2   AppKit                              0x00007fff897f3de5 -[NSWindow disableScreenUpdatesUntilFlush] + 127
void CGSUpdateManager::log() const:  3   AppKit                              0x00007fff897b3250 -[NSView _gainedLayerTreeHostAncestor] + 385
void CGSUpdateManager::log() const:  4   AppKit                              0x00007fff897b30ae -[NSView _recursiveGainedLayerTreeHostAncestor] + 27
void CGSUpdateManager::log() const:  5   AppKit                              0x00007fff897b767a -[NSScroller _recursiveGainedLayerTreeHostAncestor] + 103
void CGSUpdateManager::log() const:  6   AppKit                              0x00007fff89a1ea56 -[NSScroller _setSurfaceBacked:] + 213
void CGSUpdateManager::log() const:  7   AppKit                              0x00007fff8998424f -[NSScrollView setScrollerStyle:] + 304
void CGSUpdateManager::log() const:  8   AppKit                              0x00007fff8a01bf27 +[NSScrollerImpPair _updateAllScrollerImpPairsForNewRecommendedScrollerStyle:] + 426
void CGSUpdateManager::log() const:  9   CoreFoundation                         0x00007fff914b5cbc __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 12
void CGSUpdateManager::log() const:  10  CoreFoundation                      0x00007fff913a71b4 _CFXNotificationPost + 3140
void CGSUpdateManager::log() const:  11  Foundation                          0x00007fff917feea1 -[NSNotificationCenter postNotificationName:object:userInfo:] + 66
void CGSUpdateManager::log() const:  12  CoreFoundation                      0x00007fff9141754c __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
void CGSUpdateManager::log() const:  13  CoreFoundation                      0x00007fff91409655 __CFRunLoopDoBlocks + 341
void CGSUpdateManager::log() const:  14  CoreFoundation                      0x00007fff91409196 __CFRunLoopRun + 1814
void CGSUpdateManager::log() const:  15  CoreFoundation                      0x00007fff91408838 CFRunLoopRunSpecific + 296
void CGSUpdateManager::log() const:  16  HIToolbox                           0x00007fff8f30743f RunCurrentEventLoopInMode + 235
void CGSUpdateManager::log() const:  17  HIToolbox                             0x00007fff8f3071ba ReceiveNextEventCommon + 431
void CGSUpdateManager::log() const:  18  HIToolbox                           0x00007fff8f306ffb _BlockUntilNextEventMatchingListInModeWithFilter + 71
void CGSUpdateManager::log() const:  19  AppKit                              0x00007fff897376d1 _DPSNextEvent + 964
void CGSUpdateManager::log() const:  20  AppKit                              0x00007fff89736e80 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 194
void CGSUpdateManager::log() const:  21  AppKit                              0x00007fff8972ae23 -[NSApplication run] + 594
void CGSUpdateManager::log() const:  22  AppKit                              0x00007fff897162d4 NSApplicationMain + 1832
void CGSUpdateManager::log() const:  23  Well                                0x0000000100019422 top_level_code + 34
void CGSUpdateManager::log() const:  24  Well                                0x000000010001945a main + 42
void CGSUpdateManager::log() const:  25  libdyld.dylib                       0x00007fff85b7b5c9 start + 1

确保在 viewDidLoad、viewWillAppear 和 viewWillDisappear 中调用 super。

我升级到 El Capitan 后开始遇到同样的问题。

我最终将其追踪到我的代码库深处,之前没有引起问题...我有一个流浪电话:

[NSGraphicsContext restoreCurrentContext];

这以前是个问题...确保平衡这些调用...尤其是 return 早期的函数!

[NSGraphicsContext saveCurrentContext];
[NSGraphicsContext restoreCurrentContext];

与 CGContextSaveGState(ctx) 类似; CGContextRestoreGState()