【问题标题】:'Unable to create description in descriptionForLayoutAttribute_layoutItem_coefficient. Something is nil''无法在 descriptionForLayoutAttribute_layoutItem_coefficient 中创建描述。有些东西是零
【发布时间】:2014-11-19 10:03:48
【问题描述】:

首先,我有 3 个不同的 UIView 来替换 iPad 故事板上 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

【问题讨论】:

  • 重置 iPhone 模拟器。清理所有,构建并运行程序。
  • 我有同样的问题,并观察到这个问题是由自动布局约束引起的。通过更新您最近添加的约束来检查它们。这将对其他人有所帮助... :)

标签: ios objective-c xcode autolayout


【解决方案1】:

当您使用 MarginsbaselinesiOS 7 的约束条件下运行应用时,会出现此崩溃。

要查找并删除所有虚拟约束字符串,您可以这样做:

Xcode 没有在Interface Builder 中正确突出所有这些约束,因此您可以使用此解决方案:

  1. 关闭Xcode
  2. 在您喜欢的文本编辑器中打开您的故事板文件
  3. 使用正则表达式查找所有匹配项:(\w)Margin",并将它们全部替换为模式:\1"(正则表达式版本是 Sublime 2 中使用的版本)
  4. 使用以下模式查找并从情节提要文件中删除所有字符串:.*"baseline".*\n
  5. 现在保存文件并在Xcode 中打开它
  6. 修复所有出现的错位:找到所有警告并按_“更新所有视图的约束”以保存所有视图的原始位置。
  7. 利润!

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

【讨论】:

  • 完美!这解决了我崩溃的麻烦,也让我更深入地研究导致它的原因。更多讨论见stackoverflow.com/questions/25807545/…
  • 谢谢!对我来说也是如此,第 4 步,只需删除所有包含“基线”属性的行。
【解决方案2】:

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

有些标签不知道确定它的宽度。

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

Trailing Space to: superview
Leading Space to: superview

固定约束时,有一个选项“Constraint to Margin”,在 Xcode 6 中默认选中。旧版本不支持。

【讨论】:

  • 在我的情况下,它是“基线对齐”,删除它并工作
  • 我多次遇到这个问题。每次都是不同的自动布局问题。异常最糟糕的是它被主要捕获,因此您不知道问题的根源。如果使用 CollectionView 在 cellForItemAtIndexPath 中设置断点来查找导致问题的单元格。
  • 如何解决问题?我必须从头开始设置自动布局约束吗?
  • 如果我没有设置任何约束怎么办?
【解决方案3】:

你是对的@Kyle。这是由于自动布局约束引起的。 @Mazen,就我而言,它也是“第一个基线对齐”,将其删除并起作用。以下是用于检测/解决问题的一些检查。

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

  2. 确定情节提要后,使用添加缺失约束或其他类似选项解决情节提要显示的错误和警告。

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

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

  5. 您可以使用此链接解决自动布局问题。 Resolving Auto Layout Issues

希望这会对某人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 2022-06-11
    相关资源
    最近更新 更多