I started a new project in Xcode 10 using iOS SDK 12. I selected the Master-Detail App template. I can run the app from the start without making any changes to the project and it works. But when the only change I make is I turn off auto layout in the Main.storyboard and the app crashes when selecting an item in the Master view and sends it to the Detail view. even though the only change I made was turning Autolayout off.
Does iOS 12 SDK require autolayout?
In Xcode 9, turning off Autolayout in a Master-Detail app template would not cause this crash.
Any help would be greatly appreciated, I know I should be transitioning to autolayout instead of doing everything manually but I have gotten there yet.
Below is the error that spits out.
2018-10-08 11:16:02.968981-0400 Trial2[1100:19064] -[DetailViewController topViewController]: unrecognized selector sent to instance 0x7fbb3652b350
2018-10-08 11:16:02.981283-0400 Trial2[1100:19064] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[DetailViewController topViewController]: unrecognized selector sent to instance 0x7fbb3652b350'
*** First throw call stack:
(
0 CoreFoundation 0x000000010f2ce29b __exceptionPreprocess + 331
1 libobjc.A.dylib 0x000000010df3f735 objc_exception_throw + 48
2 CoreFoundation 0x000000010f2ecfa4 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132
3 UIKitCore 0x0000000111cac163 -[UIResponder doesNotRecognizeSelector:] + 287
4 CoreFoundation 0x000000010f2d2fb6 ___forwarding___ + 1446
5 CoreFoundation 0x000000010f2d4e88 _CF_forwarding_prep_0 + 120
6 Trial2 0x000000010d61d049 -[MasterViewController prepareForSegue:sender:] + 361
7 UIKitCore 0x0000000111dc05c7 -[UIStoryboardSegueTemplate _performWithDestinationViewController:sender:] + 182
8 UIKitCore 0x0000000111dc04e3 -[UIStoryboardSegueTemplate _perform:] + 82
9 UIKitCore 0x0000000111dc07a5 -[UIStoryboardSegueTemplate perform:] + 157
10 UIKitCore 0x0000000111e19cbb -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 1703
11 UIKitCore 0x0000000111e19f44 -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 344
12 UIKitCore 0x00000001118d097e _runAfterCACommitDeferredBlocks + 318
13 UIKitCore 0x00000001118bf424 _cleanUpAfterCAFlushAndRunDeferredBlocks + 384
14 UIKitCore 0x00000001118ee870 _afterCACommitHandler + 135
15 CoreFoundation 0x000000010f231037 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
16 CoreFoundation 0x000000010f22b4ce __CFRunLoopDoObservers + 430
17 CoreFoundation 0x000000010f22bb61 __CFRunLoopRun + 1537
18 CoreFoundation 0x000000010f22b221 CFRunLoopRunSpecific + 625
19 GraphicsServices 0x00000001175f91dd GSEventRunModal + 62
20 UIKitCore 0x00000001118c5115 UIApplicationMain + 140
21 Trial2 0x000000010d61bef0 main + 112
22 libdyld.dylib 0x000000011099b551 start + 1
23 ??? 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)
Update after Stephen Darlington's Answer
The first picture is how the Initial Storyboard when the project was created. The second picture is How the storyboard was changed when Autolayout was turned off.
This has nothing to do with autolayout. "Manual" layout is still full supported; autolayout is only Apple's preferred method.
Instead the error is on the first line of your stack trace:
-[DetailViewController topViewController]: unrecognized selector sent to instance 0x7fbb3652b350
Looks like a UINavigationController
has been removed somewhere and topViewController
is being sent to a view controller instead.