“这个 UIView 似乎是它不知道的 NSISVariable 的代表。这是一个内部 UIKit 错误”错误

Posted

技术标签:

【中文标题】“这个 UIView 似乎是它不知道的 NSISVariable 的代表。这是一个内部 UIKit 错误”错误【英文标题】:"This UIView seems to be the delegate of an NSISVariable it doesn't know anything about. This is an internal UIKit bug" Error 【发布时间】:2013-01-15 02:34:44 【问题描述】:

我正在做一个 opengl 项目。 我使用了一些图像(2 个用于 x-y 比例)和标签 (8) 在屏幕上显示比例。 我的第一个视图是tableview,我从中转到openglView。但是每当我从openglView 回到tableView 时,它都会给我这个错误并且应用程序崩溃。

“这个 UIView 似乎是它不知道的 NSISVariable 的代表。这是一个内部 UIKit 错误。”

有什么建议吗? 发生这种情况是因为我包含了太多的 UI 元素,除了那些图像和标签,我还使用了一些按钮。我正在将affineTransform 应用于这些图像和标签以及一个按钮。

确切的错误是:

2013-01-31 12:20:18.743 EMtouch[50496:12203] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: ' Rows:
    UILayoutContainerView:0x9835660.Height == 480 + 1*0x7e53030.marker + 1*0x7e546c0.marker
    UILayoutContainerView:0x9835660.Width == 320 + 1*0x7e52f90.marker + 1*0x7e54330.marker
    UILayoutContainerView:0x9835660.minX == 0 + 1*0x7e52ca0.marker + -0.5*0x7e52f90.marker
    UILayoutContainerView:0x9835660.minY == 0 + 1*0x7e52fd0.marker + -0.5*0x7e53030.marker
    UINavigationTransitionView:0x9837ea0.Height == 480 + 1*0x7e51bf0.marker + 1*0x7e53030.marker + 1*0x7e546c0.marker
    UINavigationTransitionView:0x9837ea0.Width == 320 + 1*0x7e519c0.marker + 1*0x7e52f90.marker + 1*0x7e54330.marker
    UINavigationTransitionView:0x9837ea0.minX == 0 + 1*0x7e51940.marker + -0.5*0x7e519c0.marker
    UINavigationTransitionView:0x9837ea0.minY == 0 + 1*0x7e51b80.marker + -0.5*0x7e51bf0.marker
    UIWindow:0x7e1aea0.Height == 480 + 1*0x7e546c0.marker
    UIWindow:0x7e1aea0.Width == 320 + 1*0x7e54330.marker
    UIWindow:0x7e1aea0.minX == 0 + -0.5*0x7e54330.marker + 1*0x7e54410.marker
    UIWindow:0x7e1aea0.minY == 0 + 1*0x7e542d0.marker + -0.5*0x7e546c0.marker
    objective == <250:-0.000579834> + <250:-9.72015e-08>*UILabel:0x7b44bf0.Width + <250:9.72015e-08>*UILabel:0x7b45100.Width

  Constraints:
    <NSAutoresizingMaskLayoutConstraint:0x7e51940 h=-&- v=-&- UINavigationTransitionView:0x9837ea0.midX == UILayoutContainerView:0x9835660.midX>        Marker:0x7e51940.marker
    <NSAutoresizingMaskLayoutConstraint:0x7e519c0 h=-&- v=-&- UINavigationTransitionView:0x9837ea0.width == UILayoutContainerView:0x9835660.width>      Marker:0x7e519c0.marker
    <NSAutoresizingMaskLayoutConstraint:0x7e51b80 h=-&- v=-&- UINavigationTransitionView:0x9837ea0.midY == UILayoutContainerView:0x9835660.midY>        Marker:0x7e51b80.marker
    <NSAutoresizingMaskLayoutConstraint:0x7e51bf0 h=-&- v=-&- UINavigationTransitionView:0x9837ea0.height == UILayoutContainerView:0x9835660.height>        Marker:0x7e51bf0.marker
    <NSAutoresizingMaskLayoutConstraint:0x7e52ca0 h=-&- v=-&- UILayoutContainerView:0x9835660.midX == UIWindow:0x7e1aea0.midX>      Marker:0x7e52ca0.marker
    <NSAutoresizingMaskLayoutConstraint:0x7e52f90 h=-&- v=-&- UILayoutContainerView:0x9835660.width == UIWindow:0x7e1aea0.width>        Marker:0x7e52f90.marker
    <NSAutoresizingMaskLayoutConstraint:0x7e52fd0 h=-&- v=-&- UILayoutContainerView:0x9835660.midY == UIWindow:0x7e1aea0.midY>      Marker:0x7e52fd0.marker
    <NSAutoresizingMaskLayoutConstraint:0x7e53030 h=-&- v=-&- UILayoutContainerView:0x9835660.height == UIWindow:0x7e1aea0.height>      Marker:0x7e53030.marker
    <NSAutoresizingMaskLayoutConstraint:0x7e54330 h=--- v=--- H:[UIWindow:0x7e1aea0(320)]>      Marker:0x7e54330.marker
    <NSAutoresizingMaskLayoutConstraint:0x7e546c0 h=--- v=--- V:[UIWindow:0x7e1aea0(480)]>      Marker:0x7e546c0.marker
    <_UIWindowAnchoringConstraint:0x7e542d0 h=--- v=--- UIWindow:0x7e1aea0.midY == + 240>       Marker:0x7e542d0.marker
    <_UIWindowAnchoringConstraint:0x7e54410 h=--- v=--- UIWindow:0x7e1aea0.midX == + 160>       Marker:0x7e54410.marker
: internal error.  Cannot find an outgoing row head for incoming head UILabel:0x7b44bf0.Width, which should never happen.'
*** First throw call stack:
(0x1fb1012 0x19f4e7e 0x1fb0deb 0x1599609 0x159c64f 0x159c753 0xe7e8f9 0x982b24 0x982783 0xbba3fe 0xbba698 0x97a3b6 0x97a554 0x28f7d8 0x1c2b014 0x1c1b7d5 0x1f57af5 0x1f56f44 0x1f56e1b 0x34d37e3 0x34d3668 0x93c65c 0xc56d 0x2b35 0x1)
libc++abi.dylib: terminate called throwing an exception

【问题讨论】:

UI元素肯定不会太多。只是猜测,但我知道当应用仿射变换时,frame 属性的值是未定义的。也许自动布局正在使用框架?要测试该理论,您可以删除转换并查看错误是否仍然存在。比我有更多自动布局经验的人可能有更好的猜测,因为我不知道“传出行头”是什么。也可能值得向 Apple 提交雷达。 我同意 MaxGabriel,这听起来像是一个自动布局问题。这个 opengl 有没有可能是为 iphone4s 和更早版本编写的,也就是说,你没有使用 ES 3? 我们需要您的 tableview 父控制器代码来查看一切是如何设置的。还有您来自的控制器代码及其代码,用于查看从一个视图控制器到另一个视图控制器时实际发生的情况。我认为问题根本不在于 UI 元素,但这是我的猜测。 听起来好像您的应用程序崩溃了,因为在加载 openGL 视图时,您将其用作 UIView 覆盖器,然后当返回到 tableview 时,就好像程序不知道关于 tableview 的任何内容,因此它返回错误,从而使应用程序崩溃 试试这个如果它工作与否***.com/questions/11303563/… 【参考方案1】:

“我从中转到 openglView 的 tableview” - 此语句结合仿射变换的使用表明您没有使用标准导航并尝试同时移动视图和使用 Autolayout。

此崩溃与相反的一组约束有关,我猜您正在应用仿射变换,因此会弄乱一些帧。尝试修改约束常量而不是使用任何转换。

【讨论】:

以上是关于“这个 UIView 似乎是它不知道的 NSISVariable 的代表。这是一个内部 UIKit 错误”错误的主要内容,如果未能解决你的问题,请参考以下文章