setTranslatesAutoresizingMaskIntoConstraints和setFrame组合使用导致的异常

在用Ojbect-c开发OSX应用的时候需要用到自定义控件并用代码进行布局,很自然地就使用了setTranslatesAutoresizingMaskIntoConstraints和setFrame组合,同时这个组合也很好的满足的需求。但是每当我先当前项目添加一个异常断点的时候,并开启调试程序,总是停在程序刚启动的main函数。经过debug发现是应为setTranslatesAutoresizingMaskIntoConstraints和setFrame组合导致了这个异常。

代码

[_programHeadView setTranslatesAutoresizingMaskIntoConstraints:YES];
[_programHeadView setFrame:headRect];

解决办法

在调用setTranslatesAutoresizingMaskIntoConstraints和setFrame之前先把view从父view用移除,调用之后再添加回去这样就能避免当前view的constraints和默认的constraints产生冲突。

[_programHeadView removeFromSuperview];
[_programHeadView setTranslatesAutoresizingMaskIntoConstraints:YES];
[_programHeadView setFrame:headRect];
[[[self window] contentView] addSubview:_programHeadView];

异常信息

* thread #1: tid = 0x6931b, 0x00007fffb1b5745d libobjc.A.dylib`objc_exception_throw, queue = ‘com.apple.main-thread‘, stop reason = breakpoint 1.1
  * frame #0: 0x00007fffb1b5745d libobjc.A.dylib`objc_exception_throw
    frame #1: 0x00007fff9cde1c3d CoreFoundation`+[NSException raise:format:] + 205
    frame #2: 0x00007fff9b2a7014 AppKit`LAYOUT_CONSTRAINTS_NOT_SATISFIABLE + 45
    frame #3: 0x00007fff9b2a717e AppKit`-[NSView(NSConstraintBasedLayout) engine:willBreakConstraint:dueToMutuallyExclusiveConstraints:] + 267
    frame #4: 0x00007fff9e994fea Foundation`-[NSISEngine handleUnsatisfiableRowWithHead:body:usingInfeasibilityHandlingBehavior:mutuallyExclusiveConstraints:] + 507
    frame #5: 0x00007fff9e996006 Foundation`-[NSISEngine tryUsingArtificialVariableToAddConstraintWithMarker:rowBody:usingInfeasibilityHandlingBehavior:mutuallyExclusiveConstraints:] + 482
    frame #6: 0x00007fff9e729325 Foundation`-[NSISEngine tryToAddConstraintWithMarker:expression:integralizationAdjustment:mutuallyExclusiveConstraints:] + 730
    frame #7: 0x00007fff9e99ea01 Foundation`-[NSLayoutConstraint _addLoweredExpression:toEngine:integralizationAdjustment:lastLoweredConstantWasRounded:mutuallyExclusiveConstraints:] + 281
    frame #8: 0x00007fff9e7207ac Foundation`-[NSLayoutConstraint _addToEngine:integralizationAdjustment:mutuallyExclusiveConstraints:] + 236
    frame #9: 0x00007fff9a822033 AppKit`-[NSView(NSConstraintBasedLayout) _layoutEngine_didAddLayoutConstraint:integralizationAdjustment:mutuallyExclusiveConstraints:] + 91
    frame #10: 0x00007fff9a7b68ba AppKit`-[NSView(NSConstraintBasedLayout) _constraints_didChangeAutoresizingConstraintsArrayForContainedView:] + 224
    frame #11: 0x00007fff9a83c3ed AppKit`-[NSView updateConstraints] + 139
    frame #12: 0x00007fff9a83bf27 AppKit`-[NSView _updateConstraintsForSubtreeIfNeededCollectingViewsWithInvalidBaselines:] + 989
    frame #13: 0x00007fff9a83bd31 AppKit`-[NSView _updateConstraintsForSubtreeIfNeededCollectingViewsWithInvalidBaselines:] + 487
    frame #14: 0x00007fff9a884c26 AppKit`__82-[NSView _updateConstraintsForSubtreeIfNeededCollectingViewsWithInvalidBaselines:]_block_invoke + 290
    frame #15: 0x00007fff9e726adb Foundation`-[NSISEngine withBehaviors:performModifications:] + 155
    frame #16: 0x00007fff9a83bc33 AppKit`-[NSView _updateConstraintsForSubtreeIfNeededCollectingViewsWithInvalidBaselines:] + 233
    frame #17: 0x00007fff9b059c84 AppKit`__46-[NSView _updateConstraintsForSubtreeIfNeeded]_block_invoke + 49
    frame #18: 0x00007fff9e726adb Foundation`-[NSISEngine withBehaviors:performModifications:] + 155
    frame #19: 0x00007fff9a7b5760 AppKit`-[NSView(NSConstraintBasedLayout) _withAutomaticEngineOptimizationDisabled:] + 70
    frame #20: 0x00007fff9b059a79 AppKit`-[NSView _updateConstraintsForSubtreeIfNeeded] + 224
    frame #21: 0x00007fff9b2acbb8 AppKit`-[NSWindow(NSConstraintBasedLayout) _updateConstraintsForEngineHostingViews:] + 76
    frame #22: 0x00007fff9a884a7a AppKit`__62-[NSWindow(NSConstraintBasedLayout) updateConstraintsIfNeeded]_block_invoke + 159
    frame #23: 0x00007fff9e726adb Foundation`-[NSISEngine withBehaviors:performModifications:] + 155
    frame #24: 0x00007fff9a7b5760 AppKit`-[NSView(NSConstraintBasedLayout) _withAutomaticEngineOptimizationDisabled:] + 70
    frame #25: 0x00007fff9a88496e AppKit`-[NSWindow(NSConstraintBasedLayout) updateConstraintsIfNeeded] + 245
    frame #26: 0x00007fff9a9248fb AppKit`___NSWindowGetDisplayCycleObserver_block_invoke + 73
    frame #27: 0x00007fff9a924831 AppKit`__37+[NSDisplayCycle currentDisplayCycle]_block_invoke + 622
    frame #28: 0x00007fffa2802dc6 QuartzCore`CA::Transaction::run_commit_handlers(CATransactionPhase) + 46
    frame #29: 0x00007fffa290c8f0 QuartzCore`CA::Context::commit_transaction(CA::Transaction*) + 160
    frame #30: 0x00007fffa28018a1 QuartzCore`CA::Transaction::commit() + 475
    frame #31: 0x00007fff9ac07b99 AppKit`__37+[NSDisplayCycle currentDisplayCycle]_block_invoke.31 + 323
    frame #32: 0x00007fff9ccf8dd7 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
    frame #33: 0x00007fff9ccf8d47 CoreFoundation`__CFRunLoopDoObservers + 391
    frame #34: 0x00007fff9ccd9789 CoreFoundation`__CFRunLoopRun + 873
    frame #35: 0x00007fff9ccd91c4 CoreFoundation`CFRunLoopRunSpecific + 420
    frame #36: 0x00007fff9c23aebc HIToolbox`RunCurrentEventLoopInMode + 240
    frame #37: 0x00007fff9c23abf9 HIToolbox`ReceiveNextEventCommon + 184
    frame #38: 0x00007fff9c23ab26 HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter + 71
    frame #39: 0x00007fff9a7d5e24 AppKit`_DPSNextEvent + 1120
    frame #40: 0x00007fff9af5185e AppKit`-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 2796
    frame #41: 0x00007fff9a7ca7ab AppKit`-[NSApplication run] + 926
    frame #42: 0x00007fff9a7951de AppKit`NSApplicationMain + 1237
时间: 2024-11-13 06:59:02

setTranslatesAutoresizingMaskIntoConstraints和setFrame组合使用导致的异常的相关文章

路径名导致的异常:javax.imageio.IIOException: Can't read input file!

背景: 写了一个测试程序,目的是读取本地的图片,为其打上水印图片.在使用过程中总会遇到:javax.imageio.IIOException: Can't read input file!的错误,最开始以为是图片路径名称写的不对,按照网上的提示换成正斜线和反斜线都不行.后来发现问题的原因是:图片的路径中不能有点(英文点:.); 具体的错误异常提示如下: javax.imageio.IIOException: Can't read input file! at javax.imageio.Imag

易飞-凭证打印异常(字符中含有空格,自动分行导致显示异常)

在打印凭证中通常会显示自定义或者输入的内容.比如:在电子行业中的插件位置,生产人员经常在作业的时候经常会根据领料单显示的插件位置来作业. 至于为何不根据作业指导书或者BOM等其他方式来确认不在今天我们讨论的范围. 解决办法一:直接行高加大.当然可以,但是如果只是为了一张工单中的几个元件的插件位置显示而已,增加了纸张打印.从成本节约角度不太实用 解决办法二:评估了最多字符也可以在两行中显示完毕的情况下,自动分行差一两个字符的话,就把字体设置小点. 现在问题是,为和第二行中CA9,之后就自动分行了呢

注册了listActivity而没有用导致的异常

昨天在修改一个已有代码的时候没有注意原来的代码是--extends listActivity 结果在加上xml文件后运行后出现了这样的情况:java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list' 后来仔细观察才知道以前面提到的这个问题.一下是一个网友的解释: "对于以上错误,其实可能是因为我们要实现对ListView中setOnItemClick

记录一次ARP故障导致网络异常

故障现象:单位某台PC出现无法打印故障,提示为下图 该PC重新设置打印机就能够使用但在重启之后无法连接到打印机,并且还会出现连接共享文件的时候会出现类似掉线的情况 分析过程:打印机为网络打印机 内存使用率仅有10% 所以排除1和3 剩下围绕着2的提示来解决 实践过程: 先从网络方面下手,利用IMCP的PING功能对打印服务器,打印机本身进行测试,结果为能PING通. 注!此时发现一个问题,服务器以及其他PC无法PING通本PC! 针对上述所说的故障对本PC进行了网卡驱动更新,系统重装,甚至更换网

Fragment已经被added了导致的异常。

java.lang.IllegalStateException: Fragment already added:  ******Effect 出现的原因是commit方法提交是异步的,所以容易出现,判断的时候是还没有added的状态,但是在真的添加的时候,重复添加了,其实就是一个同步异步的问题. 解决方式其实就是自己添加一个tag,每个fragment一个tag就可以解决重复添加导致的异常了. mAdded = new boolean[]{false, false, false, false,

【原创】访问Linux进程文件表导致系统异常复位的排查记录

前提知识: Linux内核.Linux 进程和文件数据结构.vmcore解析.汇编语言 问题背景: 这个问题出自项目的一个安全模块,主要功能是确定某进程是否有权限访问其正在访问的文件. 实现功能时,需要在内核里通过扫描该进程打开的文件表,获取文件的路径,和安全模块里配置的可访问文件的进程白名单进行匹配: 模块会一直到搜索到进程pid为1的进程,也就是init进程.在访问中间某个父进程的文件表时,出现struct task_struct的files指针为空的情况, 导致系统异常复位. 下面就是这次

[MSSQL]服务器端压力过大导致SSMS异常

登陆SSMS时: 编辑表时: 查看事件无重大异常,查看内存接近98%,360提示进程97%. 会不会以为服务器压力过大导致的? 待MSSQL空闲期间,重启测试.结果重启之后正常.

Ubuntu无法正常输入英文单引号符号 + 误删除package导致系统设置异常(解决方案)

1 先说解决单引号的问题 写代码,遇到了输入英文单引号无法正常输入,需要按两次,而且不是竖向,而是斜的. 然后在寻找解决方案的过程中又遇到了把中文输入法搞得不能使用的问题.破费周折!!! 对Ubuntu还不太熟,常常会遇到这种情况,“有一个问题,需要解决,然后去网上找答案,结果不料找了一个不靠谱的答案,于是,就拥有了两个问题”.= =! 好吧,说一下解决方案吧. 其实就是在Ubuntu14.04 LTS系统下,英文输入法的键盘布局不正确导致的,我的解决方式是: 1.删除原来的那个英文键盘布局,改

Aliyun OSS SDK 异步分块上传导致应用异常退出

问题描述: 使用Aliyun OSS SDK的BeginUploadPart/EndUploadPart执行异步分块上传操作,程序出现错误并异常退出! 原因分析: Using .NET Framework 2.0, unhandled exceptions, no matter where they come from, will cause termination of the app. (详见:Exceptions in Managed Threads:https://msdn.micros