UINavigationController在Xcode 9

时间:2017-09-22 16:32:22

标签: ios objective-c

每当我尝试在我的应用程序上使用navigationController推送视图时,我都会收到下面提供的控制台消息。但是,如果我只推动简单的视图控制器它工作正常,它只发生在导航控制器上。

我没有使用第三方库来推送视图,我检查过UIkit框架没关系,我也在构建之前清理项目,还尝试了一个与我的自定义视图控制器不同的新视图控制器,但错误是一样的,它只发生在Xcode 9.0的新版本上,在早期版本8.0上没有发生这种情况。

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Sigh. Contentview size is zero.'

*** First throw call stack:
(
0   CoreFoundation                      0x000000010d6ec1cb __exceptionPreprocess + 171
1   libobjc.A.dylib                     0x00000001132a5f41 objc_exception_throw + 48
2   CoreFoundation                      0x000000010d6f1362 +[NSException raise:format:arguments:] + 98
3   Foundation                          0x000000010eabb089 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 193
4   UIKit                               0x00000001110d7701 -[_UINavigationBarVisualProviderModernIOS _contentViewFittingHeight] + 265
5   UIKit                               0x00000001110da40e -[_UINavigationBarVisualProviderModernIOS heightRangeFittingWidth:] + 427
6   UIKit                               0x00000001110da253 -[_UINavigationBarVisualProviderModernIOS sizeThatFits:] + 138
7   UIKit                               0x000000011105443d -[UIView(UIConstraintBasedLayout) systemLayoutSizeFittingSize:withHorizontalFittingPriority:verticalFittingPriority:] + 246
8   UIKit                               0x00000001106cc900 -[UINavigationController setNavigationBar:] + 348
9   UIKit                               0x00000001106cc677 -[UINavigationController _navigationBarHiddenByDefault:] + 161
10  UIKit                               0x00000001106d4a7d -[UINavigationController loadView] + 183
11  UIKit                               0x0000000110697941 -[UIViewController loadViewIfRequired] + 195
12  UIKit                               0x000000011069819e -[UIViewController view] + 27
13  UIKit                               0x00000001106e36f6 -[UINavigationController pushViewController:transition:forceImmediate:] + 676
14  UIKit                               0x00000001106e31d2 -[UINavigationController pushViewController:animated:] + 792
15  UIKit                               0x00000001106c2cd1 -[UINavigationController initWithRootViewController:] + 125
16  Tigo Money Staging                  0x000000010a1add26 -[MTAppDelegate openStartUp] + 358
17  Tigo Money Staging                  0x000000010a1ac8c1 -[MTAppDelegate application:didFinishLaunchingWithOptions:] + 241
18  UIKit                               0x00000001104f135a -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 267
19  UIKit                               0x00000001104f2db7 -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 4105
20  UIKit                               0x00000001104f8245 -[UIApplication _runWithMainScene:transitionContext:completion:] + 1720
21  UIKit                               0x00000001108b3c6c __111-[__UICanvasLifecycleMonitor_Compatability _scheduleFirstCommitForScene:transition:firstActivation:completion:]_block_invoke + 924
22  UIKit                               0x0000000110c813ef +[_UICanvas _enqueuePostSettingUpdateTransactionBlock:] + 153
23  UIKit                               0x00000001108b3865 -[__UICanvasLifecycleMonitor_Compatability _scheduleFirstCommitForScene:transition:firstActivation:completion:] + 249
24  UIKit                               0x00000001108b40c3 -[__UICanvasLifecycleMonitor_Compatability activateEventsOnly:withContext:completion:] + 668
25  UIKit                               0x0000000111211c11 __82-[_UIApplicationCanvas _transitionLifecycleStateWithTransitionContext:completion:]_block_invoke + 262
26  UIKit                               0x0000000111211aca -[_UIApplicationCanvas _transitionLifecycleStateWithTransitionContext:completion:] + 444
27  UIKit                               0x0000000110effb9c __125-[_UICanvasLifecycleSettingsDiffAction performActionsForCanvas:withUpdatedScene:settingsDiff:fromSettings:transitionContext:]_block_invoke + 420
28  UIKit                               0x00000001110fac3e _performActionsWithDelayForTransitionContext + 100
29  UIKit                               0x0000000110eff998 -[_UICanvasLifecycleSettingsDiffAction performActionsForCanvas:withUpdatedScene:settingsDiff:fromSettings:transitionContext:] + 231
30  UIKit                               0x0000000110c80a4c -[_UICanvas scene:didUpdateWithDiff:transitionContext:completion:] + 392
31  UIKit                               0x00000001104f6ac6 -[UIApplication workspace:didCreateScene:withTransitionContext:completion:] + 523
32  UIKit                               0x0000000110abf523 -[UIApplicationSceneClientAgent scene:didInitializeWithEvent:completion:] + 369
33  FrontBoardServices                  0x0000000118890158 -[FBSSceneImpl _didCreateWithTransitionContext:completion:] + 338
34  FrontBoardServices                  0x0000000118898c4d __56-[FBSWorkspace client:handleCreateScene:withCompletion:]_block_invoke_2 + 235
35  libdispatch.dylib                   0x000000011411743c _dispatch_client_callout + 8
36  libdispatch.dylib                   0x000000011411caf4 _dispatch_block_invoke_direct + 592
37  FrontBoardServices                  0x00000001188c4672 __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 24
38  FrontBoardServices                  0x00000001188c4328 -[FBSSerialQueue _performNext] + 464
39  FrontBoardServices                  0x00000001188c4897 -[FBSSerialQueue _performNextFromRunLoopSource] + 45
40  CoreFoundation                      0x000000010d68f2b1 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
41  CoreFoundation                      0x000000010d72ed31 __CFRunLoopDoSource0 + 81
42  CoreFoundation                      0x000000010d673c19 __CFRunLoopDoSources0 + 185
43  CoreFoundation                      0x000000010d6731ff __CFRunLoopRun + 1279
44  CoreFoundation                      0x000000010d672a89 CFRunLoopRunSpecific + 409
45  GraphicsServices                    0x0000000114ce59c6 GSEventRunModal + 62
46  UIKit                               0x00000001104f9d30 UIApplicationMain + 159
47  Tigo Money Staging                  0x000000010a2f8a5f main + 111
48  libdyld.dylib                       0x0000000114193d81 start + 1
49  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

这是我在didFinishLaunchingWithOptions

上的代码示例
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
CustomViewController *startUpVC = [[CustomViewController alloc] init];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:startUpVC];

使用导航控制器后,它会崩溃。

4 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,当我们使用Xcode 8保存故事板并在项目中使用Xcode 9打开时,发生这种情况是因为Xcode 9使用安全区域保存文档。 使用Xcode 9保存的Xib源代码:

<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="13196" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina4_7" orientation="portrait">
    <adaptation id="fullscreen"/>
</device>
<dependencies>
    <deployment identifier="iOS"/>
    <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13173"/>
    <capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
    <capability name="Safe area layout guides" minToolsVersion="9.0"/>
    <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
</document>

但使用Xcode 8保存的Xib是:

<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="12120" systemVersion="16F73" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
<device id="retina4_0" orientation="portrait">
    <adaptation id="fullscreen"/>
</device>
<dependencies>
    <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12088"/>
    <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
</document>

相应地更改故事板的源代码。

希望,它会帮助你!

答案 1 :(得分:0)

选择您的View Controller,然后转到Editor-&gt; Embed In-&gt; Navigation Controller。因为有时控制器不在导航控制器层次结构中,所以当用户想要推送到另一个控制器时应用程序崩溃。希望它会有所帮助。

答案 2 :(得分:0)

当我将我的右栏按钮项从情节提要板连接到IBAction时,会出现此错误,如果您问我,这将非常有趣。

答案 3 :(得分:0)

我发现导致此问题的一个常见原因是,当您尝试修改视图之前时,已在UINavigationController中调用了viewDidLoad(例如,在任何init方法中)。

通常在这些情况下,将与UINavigationController有关的所有与视图相关的修改移至viewWillAppear(或至少移至对viewDidLoad的超级调用之后)就足够了。