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