'无法在descriptionForLayoutAttribute_layoutItem_coefficient中创build描述。 有些东西是零“

首先,我得到了3个不同的UIViews来代替iPad Storyboard上的Split View Controller中的细节视图

它在iOS8 iPad上运行良好。 但是当我加载其中一个细节视图时,应用程序在iOS7和iOS 6模拟器中运行时崩溃。

我只假设这是因为我的故事板上的自动布局。

有谁知道如何修理它?

2014-09-25 04:15:19.705 PSTappsperance[48327:60b] Pad AppDelegate ######## 2014-09-25 04:15:27.869 PSTappsperance[48327:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to create description in descriptionForLayoutAttribute_layoutItem_coefficient. Something is nil' *** First throw call stack: ( 0 CoreFoundation 0x0000000110a5c495 __exceptionPreprocess + 165 1 libobjc.A.dylib 0x00000001107af99e objc_exception_throw + 43 2 CoreFoundation 0x0000000110a5c2ad +[NSException raise:format:] + 205 3 Foundation 0x00000001104ec548 descriptionForLayoutAttribute_layoutItem_coefficient + 145 4 Foundation 0x00000001104ec3bc -[NSLayoutConstraint equationDescription] + 216 5 Foundation 0x00000001104ec831 -[NSLayoutConstraint description] + 297 6 CoreFoundation 0x0000000110a1d1b9 -[NSArray descriptionWithLocale:indent:] + 345 7 Foundation 0x000000011037e14e _NSDescriptionWithLocaleFunc + 64 8 CoreFoundation 0x00000001109e1244 __CFStringAppendFormatCore + 7252 9 CoreFoundation 0x0000000110a1f913 _CFStringCreateWithFormatAndArgumentsAux + 115 10 CoreFoundation 0x0000000110a7fa5b _CFLogvEx + 123 11 Foundation 0x00000001103ae276 NSLogv + 79 12 Foundation 0x00000001103ae20a NSLog + 148 13 UIKit 0x000000010f927097 -[UIView(UIConstraintBasedLayout_EngineDelegate) engine:willBreakConstraint:dueToMutuallyExclusiveConstraints:] + 62 14 Foundation 0x00000001104e32ac -[NSISEngine handleUnsatisfiableRowWithHead:body:usingInfeasibilityHandlingBehavior:mutuallyExclusiveConstraints:] + 521 15 Foundation 0x00000001104e49b1 -[NSISEngine tryUsingArtificialVariableToAddConstraintWithMarker:rowBody:usingInfeasibilityHandlingBehavior:mutuallyExclusiveConstraints:] + 353 16 Foundation 0x000000011039c26b -[NSISEngine tryToAddConstraintWithMarker:expression:integralizationAdjustment:mutuallyExclusiveConstraints:] + 663 17 Foundation 0x00000001104ed180 -[NSLayoutConstraint _addLoweredExpression:toEngine:integralizationAdjustment:lastLoweredConstantWasRounded:mutuallyExclusiveConstraints:] + 275 18 Foundation 0x00000001103981b0 -[NSLayoutConstraint _addToEngine:integralizationAdjustment:mutuallyExclusiveConstraints:] + 204 19 UIKit 0x000000010f923f41 __57-[UIView(AdditionalLayoutSupport) _switchToLayoutEngine:]_block_invoke_2 + 413 20 Foundation 0x00000001104e529a -[NSISEngine withBehaviors:performModifications:] + 119 21 UIKit 0x000000010f923d7d __57-[UIView(AdditionalLayoutSupport) _switchToLayoutEngine:]_block_invoke + 401 22 UIKit 0x000000010f923bc3 -[UIView(AdditionalLayoutSupport) _switchToLayoutEngine:] + 197 23 UIKit 0x000000010f923e57 __57-[UIView(AdditionalLayoutSupport) _switchToLayoutEngine:]_block_invoke_2 + 179 24 Foundation 0x00000001104e529a -[NSISEngine withBehaviors:performModifications:] + 119 25 UIKit 0x000000010f923d7d __57-[UIView(AdditionalLayoutSupport) _switchToLayoutEngine:]_block_invoke + 401 26 UIKit 0x000000010f923bc3 -[UIView(AdditionalLayoutSupport) _switchToLayoutEngine:] + 197 27 UIKit 0x000000010f3ab975 __45-[UIView(Hierarchy) _postMovedFromSuperview:]_block_invoke + 95 28 Foundation 0x00000001104e529a -[NSISEngine withBehaviors:performModifications:] + 119 29 UIKit 0x000000010f3ab889 -[UIView(Hierarchy) _postMovedFromSuperview:] + 321 30 UIKit 0x000000010f3b52ac -[UIView(Internal) _addSubview:positioned:relativeTo:] + 1508 31 UIKit 0x000000010f632778 -[UINavigationTransitionView transition:fromView:toView:] + 454 32 UIKit 0x000000010f6325b0 -[UINavigationTransitionView transition:toView:] + 25 33 UIKit 0x000000010f46f4d7 -[UINavigationController _startTransition:fromViewController:toViewController:] + 2893 34 UIKit 0x000000010f46f787 -[UINavigationController _startDeferredTransitionIfNeeded:] + 547 35 UIKit 0x000000010f470238 -[UINavigationController __viewWillLayoutSubviews] + 43 36 UIKit 0x000000010f58a895 -[UILayoutContainerView layoutSubviews] + 202 37 UIKit 0x000000010f3b7993 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 354 38 QuartzCore 0x000000011427c802 -[CALayer layoutSublayers] + 151 39 QuartzCore 0x0000000114271369 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 363 40 QuartzCore 0x00000001142711ea _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24 41 QuartzCore 0x00000001141e4fb8 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 252 42 QuartzCore 0x00000001141e6030 _ZN2CA11Transaction6commitEv + 394 43 QuartzCore 0x00000001141e669d _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 89 44 CoreFoundation 0x0000000110a27dc7 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23 45 CoreFoundation 0x0000000110a27d37 __CFRunLoopDoObservers + 391 46 CoreFoundation 0x0000000110a07522 __CFRunLoopRun + 946 47 CoreFoundation 0x0000000110a06d83 CFRunLoopRunSpecific + 467 48 GraphicsServices 0x0000000112dbdf04 GSEventRunModal + 161 49 UIKit 0x000000010f357e33 UIApplicationMain + 1010 50 PSTappsperance 0x000000010f092653 main + 115 51 libdyld.dylib 0x00000001114b05fd start + 1 52 ??? 0x0000000000000001 0x0 + 1 )libc++abi.dylib: terminating with uncaught exception of type NSException 

当您在iOS 7使用边距基线约束运行应用程序时,会出现此崩溃。

要查找并删除所有虚拟约束string,可以这样做:

Xcode不会在Interface Builder正确突出显示所有这些约束,因此您可以使用此解决scheme:

  1. closuresXcode
  2. 用你最喜欢的文本编辑器打开你的故事板文件
  3. 使用正则expression式查找所有匹配项: (\w)Margin"并将其全部replace为模式: \1" (正则expression式版本是Sublime 2中使用的版本)
  4. 使用以下模式查找并从故事板文件中移除所有string: .*"baseline".*\n
  5. 现在保存该文件,并在Xcode打开它
  6. 修复所有出现的错位:find所有警告,然后按_“更新所有视图的约束”来保存所有视图的原始位置。
  7. 利润!

更新:我发现“基准”约束也会导致崩溃,但Xcode不显示任何有关这些约束的警告!

解决了。 这是因为自动布局的限制。

有标签,不知道确定其宽度。

但为什么只适用于iOS 8? 我固定了两个约束来确定Xcode 6中的宽度

 Trailing Space to: superview Leading Space to: superview 

当固定约束时,有一个选项“约束到边距”,在Xcode 6中默认选中。而旧版本不支持。

你是对的@凯尔。 这是由于自动布局限制造成的。 @Mazen,就我而言,这也是“第一次基准调整”,将其删除并运行。 这里有一些检查来检测/解决问题。

  1. 要检测哪个故事板导致此错误,您可以执行快速检查。 在“文件检查器”中,取消勾选所选故事板的“使用自动布局”。 现在,清理并构build您的应用程序。 如果还是得到相同的错误意味着导致这个错误的约束是在另一个故事板或代码中。

  2. 识别故事板后,使用“添加缺less约束”或其他类似选项来解决故事板显示的错误和警告。

  3. 过滤哪个约束导致这个错误。 一次删除3-4个约束(您可以删除更多,以使其更快)来检查错误是否已解决。 一旦错误解决,确定导致此错误的确切约束。

  4. 关于“约束到保证金”。 在我的情况下,这是在几个约束检查,但它不会导致iOS8下的任何错误/警告。

  5. 您可以使用此链接来解决自动布局问题。 解决自动布局问题

希望这会帮助别人。