XCode 6项目在ios 7.1上segue后崩溃
Posted
技术标签:
【中文标题】XCode 6项目在ios 7.1上segue后崩溃【英文标题】:XCode 6 project crashing after segue on ios 7.1 【发布时间】:2014-11-15 00:44:23 【问题描述】:我的项目在 ios 8 模拟器和我的设备(iPhone 5S、iOS 8)上运行良好,但是当我在 7.1 模拟器上运行时,每次执行 segue 时都会崩溃...
我正在粘贴部分日志。
如果我停用自动布局,它会毫无问题地运行。我试图杀死我所关注的视图控制器上的约束,但没有区别......
2014-11-15 02:39:14.574 My Project[26240:607] Objective: objective 0x79163360: <251:84> + <750:-1.42636e-07>*0x78f7c920.negErrorid: 215 + <999:2>*0x78fdf120.negErrorid: 1389 + <999:2>*0x78fdf230.negErrorid: 1392 + <999:1>*_UILayoutGuide:0x78fdf0b0.Widthid: 1390 + <999:1>*_UILayoutGuide:0x78fdf190.Widthid: 1393
2014-11-15 02:39:14.578 My Project[26240:607] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '<NSISEngine: 0x79186230> Rows:
0x78fdf120.posErrorMarkerid: 1388 == 0 + 1*0x78fdf120.negErrorid: 1389 + 1*_UILayoutGuide:0x78fdf0b0.Widthid: 1390
0x78fdf230.posErrorMarkerid: 1391 == 0 + 1*0x78fdf230.negErrorid: 1392 + 1*_UILayoutGuide:0x78fdf190.Widthid: 1393
UILayoutContainerView:0x78f5e630.Heightid: 276 == 960 + 2*0x78f7a4f0.markerid: 285 + 1*0x78f81890.markerid: 293
UILayoutContainerView:0x78f5e630.Widthid: 273 == 640 + 2*0x78f7a490.markerid: 282 + 1*0x78f81860.markerid: 290
UILayoutContainerView:0x78f5e630.minXid: 279 == 0 + 2*0x78f6e210.markerid: 278 +
.... blah blah blah
Integralization Adjustments:
(none)
Statistics:
26 rows. Variable counts:
1 -> 9
2 -> 12
3 -> 4
5 -> 1
: internal error. Cannot find an outgoing row head for incoming head 0x78f7c920.negErrorid: 215, which should never happen.'
*** First throw call stack:
(
0 CoreFoundation 0x002d91e4 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x01a978e5 objc_exception_throw + 44
2 CoreFoundation 0x002d8fbb +[NSException raise:format:] + 139
3 Foundation 0x007a6079 -[NSISEngine minimizeConstantInObjectiveRowWithHead:] + 256
4 Foundation 0x007a5ee3 -[NSISEngine optimize] + 183
5 Foundation 0x0091a6d8 -[NSISEngine withBehaviors:performModifications:] + 183
6 Foundation 0x007aa3c5 -[NSISEngine withAutomaticOptimizationDisabled:] + 48
7 UIKit 0x00bdb830 -[UIView(Hierarchy) _postMovedFromSuperview:] + 313
8 UIKit 0x00bd9b0a __UIViewWasRemovedFromSuperview + 226
9 UIKit 0x00bd970a -[UIView(Hierarchy) removeFromSuperview] + 264
10 UIKit 0x00cbcb3b -[UINavigationController navigationTransitionView:didEndTransition:fromView:toView:] + 339
11 UIKit 0x00cb4963 __49-[UINavigationController _startCustomTransition:]_block_invoke + 206
12 UIKit 0x012c4810 -[_UIViewControllerTransitionContext completeTransition:] + 99
13 UIKit 0x00b6ec94 __53-[_UINavigationParallaxTransition animateTransition:]_block_invoke103 + 680
14 UIKit 0x00be1435 -[UIViewAnimationBlockDelegate _didEndBlockAnimation:finished:context:] + 306
15 UIKit 0x00bca6dc -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] + 267
16 UIKit 0x00bca9c8 -[UIViewAnimationState animationDidStop:finished:] + 80
17 QuartzCore 0x04a8abb4 _ZN2CA5Layer23run_animation_callbacksEPv + 304
18 libdispatch.dylib 0x0215d4d0 _dispatch_client_callout + 14
19 libdispatch.dylib 0x0214b726 _dispatch_main_queue_callback_4CF + 340
20 CoreFoundation 0x0033e43e __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 14
21 CoreFoundation 0x0027f5cb __CFRunLoopRun + 1963
22 CoreFoundation 0x0027e9d3 CFRunLoopRunSpecific + 467
23 CoreFoundation 0x0027e7eb CFRunLoopRunInMode + 123
24 GraphicsServices 0x03cf45ee GSEventRunModal + 192
25 GraphicsServices 0x03cf442b GSEventRun + 104
26 UIKit 0x00b7af9b UIApplicationMain + 1225
27 My Project 0x0014744e top_level_code + 78
28 My Project 0x0014748b main + 43
29 libdyld.dylib 0x023a16d9 start + 1
30 ??? 0x00000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
【问题讨论】:
【参考方案1】:我遇到了类似的崩溃。应用程序在 iOS 8 中运行正常,每次在 iOS 7 中执行特定的 segue 时都会崩溃。除了崩溃之外,我的 View Controller 视图的布局在 iOS 7 中运行时不正确,在 iOS 8 中正常。
您是否使用比例高度/宽度约束?我在场景 A 中使用了其中的一些,并且在切换到场景 B 后应用程序总是崩溃。我禁用了场景 A 中的所有比例高度/宽度约束,并且应用程序不再崩溃,尽管布局显然是错误的。
对我来说这似乎是一个错误。
【讨论】:
【参考方案2】:我刚刚遇到了类似的问题。花了几天时间才弄清楚是什么触发了它。
我的应用在 iPhone 5s(在模拟器中)的 iOS 7 中崩溃,但在 iOS 8 或其他设备上没有。当我的控制器被弹出时,我遇到了同样的错误(“无法为传入的头找到传出的行头......”)......以及当控制器在 UIPageViewController 中被滚动离开时。
在这两种情况下,问题都是由于我使用 UIView.insertSubview:belowSubview: 和 UIView.bringSubviewToFront: 等 API 将全屏视图堆叠在一起这一事实触发的。解决方案/解决方法是更改我们的代码以动态添加/删除我们的视图,而不是堆叠它们并打乱它们的顺序。
希望这可以帮助遇到同样问题的其他人。
【讨论】:
【参考方案3】:这是一个布局问题。尝试删除一些可疑的子视图并运行。我用这种方法解决了这个问题。顺便说一句,我认为这是iOS7中的一个错误,在iOS 8中已解决。
【讨论】:
【参考方案4】:这个问题已经晚了,但我认为我的回答可能会对某人有所帮助。
这个crash也发生在我身上,情况和输出差不多。
我很确定这是一个错误。要解决这个问题,请按住 control 并单击情节提要并选择 Show File Inspector。在检查器面板中,将故事板的构建版本设置为 iOS 8.0 及更高版本。现在一切正常。
【讨论】:
【参考方案5】:绝对是 iOS7 IB 错误。我遇到了这个问题,通过首先确定有问题的约束然后将其从 IB 中删除来解决它。然后只需在 viewDidLoad 中使用NSLayoutConstraint constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant: 以编程方式实例化约束
【讨论】:
【参考方案6】:我遇到了似乎相似的问题。我将 push segue 放在我的视图中以转换到另一个视图。还有什么。每次模拟器崩溃。就我而言,原因很简单。 要使用 push segue,必须从 Navigation Controller 管理 ViewController。如果不是,它会立即崩溃,在控制台中打印类似“无法在情节提要中找到 ViewController”的内容。 出去的方法有两种: - 在导航控制器中嵌入视图(有它的工具:菜单编辑器->嵌入->导航控制器 - 使用 Modal Segue insted。
我希望这个答案可以帮助解决一些“奇怪”的崩溃。
【讨论】:
以上是关于XCode 6项目在ios 7.1上segue后崩溃的主要内容,如果未能解决你的问题,请参考以下文章
我的空 swift 应用程序在部署目标 7.1 的 xcode6-beta 上崩溃
在 removeFromParent 上 Sprite Kit iOS 7.1 崩溃
Xcode 6 Segue 与 UINavigationItem