I have a subclass of NSTextView which I'm trying to update in my UI. When the 
user clicks a button in the main UI, I run a bunch of processes in the 
background, save their output to an attributed string, then update the 
textview's textstorage on the main thread using performSelector(onMainThread:). 

@IBAction func profileAction(_ sender: Any)
 {
                <background stuff that appends text to a string, then wait till 
it's all done with repeat timer >...
                this_timer = Timer.scheduledTimer(timeInterval: 1.0, target: 
self, selector: #selector(self.myRepeatFunc),userInfo: nil, repeats: true)
                this_timer.fire()
}

        
@objc func myRepeatFunc() 
{
        if stuffIsDone == true 
        {
                this_timer.invalidate()
                self.scanBtn.isEnabled = true
                self.profileBtn.isEnabled = true
                self.historyBtn.isEnabled = true
                performSelector(onMainThread: #selector(updateUI), with: nil, 
waitUntilDone: false)
        }
}


@objc func updateUI()
{
        
        let zeroAttributesString = NSMutableAttributedString(string: "")
        
self.profilerTextView.textStorage?.setAttributedString(zeroAttributesString)
        
self.profilerTextView.textStorage?.setAttributedString(self.superAttributedString)
}


This works absolutely fine in both 10.11 and 10.12; however, on 10.13 I get the 
dreaded "This application is modifying the autolayout engine from a background 
thread after the engine was accessed from the main thread. This can lead to 
engine corruption and weird crashes." message.

I've tried swapping out performSelector(onMainThread:) for 
DispatchQueue.main.async to no avail. I still get the same error. I've tried 
using Xcode 9's 'Main Thread Checker' diagnostic tool, but even though I have 
'Pause on issues' selected, it never pauses and just lets my code run. I've 
also tried symbolic breakpoints on [NSView setFrame] and 
_AssertAutolayoutOnAllowedThreadsOnly from the stack trace. Neither stop my 
code. 

I'm out of ideas, and the rubber duck has come up short. Any advice much 
appreciated (stack trace follows):

 This application is modifying the autolayout engine from a background thread 
after the engine was accessed from the main thread. This can lead to engine 
corruption and weird crashes.
 Stack:(
        0   Foundation                          0x00007fff51ccc87a 
_AssertAutolayoutOnAllowedThreadsOnly + 201
        1   Foundation                          0x00007fff51cccf0d -[NSISEngine 
_optimizeIfNotDisabled] + 25
        2   Foundation                          0x00007fff51a526f4 -[NSISEngine 
constraintDidChangeSuchThatMarker:shouldBeReplacedByMarkerPlusDelta:] + 173
        3   Foundation                          0x00007fff51a52572 -[NSISEngine 
tryToChangeConstraintSuchThatMarker:isReplacedByMarkerPlusDelta:undoHandler:] + 
312
        4   Foundation                          0x00007fff51a46320 
-[NSLayoutConstraint _tryToChangeContainerGeometryWithUndoHandler:] + 484
        5   Foundation                          0x00007fff51a42eaa 
-[NSLayoutConstraint _setSymbolicConstant:constant:] + 311
        6   Foundation                          0x00007fff51a42d45 
-[NSLayoutConstraint setConstant:] + 68
        7   AppKit                              0x00007fff4da9e7a0 
-[NSView(NSConstraintBasedLayout) 
_updateSimpleAutoresizingConstraintsInPlace:forAutoresizingMask:] + 1501
        8   AppKit                              0x00007fff4da9ea35 
NSViewUpdateConstraintsForFrameChange + 441
        9   AppKit                              0x00007fff4cfa4599 -[NSView 
setFrameSize:] + 1515
        10  AppKit                              0x00007fff4cfbaa52 -[NSView 
setFrame:] + 371
        11  AppKit                              0x00007fff4cf70e33 -[NSClipView 
_updateOverhangSubviewsIfNeeded] + 839
        12  AppKit                              0x00007fff4d04050d -[NSClipView 
_reflectDocumentViewFrameChange] + 692
        13  AppKit                              0x00007fff4cfaa1b0 -[NSView 
_postFrameChangeNotification] + 83
        14  AppKit                              0x00007fff4cfa47bb -[NSView 
setFrameSize:] + 2061
        15  AppKit                              0x00007fff4d03a23b 
-[NSTextView(NSPrivate) _setFrameSize:forceScroll:] + 1081
        16  AppKit                              0x00007fff4d039d3a -[NSTextView 
setFrameSize:] + 143
        17  AppKit                              0x00007fff4d0392ac -[NSTextView 
setConstrainedFrameSize:] + 635
        18  UIFoundation                        0x00007fff72e25084 
-[NSLayoutManager(NSPrivate) _resizeTextViewForTextContainer:] + 938
        19  UIFoundation                        0x00007fff72f392d6 
_resizeTextViewsIfNeeded + 285
        20  UIFoundation                        0x00007fff72e29ea2 
_NSFastFillAllLayoutHolesForGlyphRange + 1851
        21  UIFoundation                        0x00007fff72e6890b 
-[NSLayoutManager lineFragmentRectForGlyphAtIndex:effectiveRange:] + 39
        22  AppKit                              0x00007fff4d1071de -[NSTextView 
_extendedGlyphRangeForRange:maxGlyphIndex:drawingToScreen:] + 509
        23  AppKit                              0x00007fff4d0d69fc -[NSTextView 
drawRect:] + 1807
        24  AppKit                              0x00007fff4d82ee3d 
_NSViewDrawRect + 83
        25  AppKit                              0x00007fff4d83c0d4 
-[NSView(NSInternal) 
_recursive:displayRectIgnoringOpacity:inGraphicsContext:shouldChangeFontReferenceColor:]
 + 1578
        26  AppKit                              0x00007fff4d83baa4 
-[NSView(NSInternal) 
_recursive:displayRectIgnoringOpacity:inContext:shouldChangeFontReferenceColor:]
 + 56
        27  AppKit                              0x00007fff4d0ce374 
__46-[NSView(NSLayerKitGlue) drawLayer:inContext:]_block_invoke + 289
        28  AppKit                              0x00007fff4d0cdf08 
-[NSView(NSLayerKitGlue) _drawViewBackingLayer:inContext:drawingHandler:] + 1577
        29  AppKit                              0x00007fff4d0cd8d9 
-[NSView(NSLayerKitGlue) drawLayer:inContext:] + 77
        30  AppKit                              0x00007fff4d272cbc -[NSTextView 
drawLayer:inContext:] + 114
        31  AppKit                              0x00007fff4d1ef863 
-[_NSBackingLayerContents drawLayer:inContext:] + 165
        32  QuartzCore                          0x00007fff5aa50b76 -[CALayer 
drawInContext:] + 281
        33  AppKit                              0x00007fff4d1ef44d 
-[_NSTiledLayer drawTile:inContext:] + 634
        34  AppKit                              0x00007fff4d1ef179 
-[_NSTiledLayerContents drawLayer:inContext:] + 181
        35  QuartzCore                          0x00007fff5aa50b76 -[CALayer 
drawInContext:] + 281
        36  AppKit                              0x00007fff4d1ef0b9 
-[NSTileLayer drawInContext:] + 166



TIA


Best



Phil
@sqwarq
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to