不使用自动布局时PrepareForSege崩溃(PrepareForSege crash when not using auto layout)

编程入门 行业动态 更新时间:2024-10-25 19:31:00
不使用自动布局时PrepareForSege崩溃(PrepareForSege crash when not using auto layout)

我有两个Xcode项目,第一个叫做blank ,new和using auto layout(默认)。 第二个称为test ,不使用自动布局(改为iPhone布局)。

在测试项目中,方法prepareForSegue崩溃:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([[segue identifier] isEqualToString:@"showDetail"]) { NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; NSDate *object = self.objects[indexPath.row]; /*The program crashed here */ DetailViewController *controller = (DetailViewController *)[[segue destinationViewController] topViewController]; [controller setDetailItem:object]; controller.navigationItem.leftBarButtonItem = self.splitViewController.displayModeButtonItem; controller.navigationItem.leftItemsSupplementBackButton = YES; } }

除了故事板的XML文件之外,两个项目之间的代码没有差异。

blank故事板:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="9532" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="H1p-Uh-vWS"> <dependencies> <deployment identifier="iOS"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9530"/> </dependencies> <scenes> <!--Master--> <scene sceneID="pY4-Hu-kfo"> <objects> <navigationController title="Master" id="RMx-3f-FxP" sceneMemberID="viewController"> <navigationBar key="navigationBar" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="Pmd-2v-anx"> <autoresizingMask key="autoresizingMask"/> </navigationBar> <connections> <segue destination="7bK-jq-Zjz" kind="relationship" relationship="rootViewController" id="tsl-Nk-0bq"/> </connections> </navigationController> <placeholder placeholderIdentifier="IBFirstResponder" id="8fS-aE-onr" sceneMemberID="firstResponder"/> </objects> <point key="canvasLocation" x="-38" y="-630"/> </scene> <!--Detail--> <scene sceneID="yUG-lL-AsK"> <objects> <viewController title="Detail" id="JEX-9P-axG" customClass="DetailViewController" sceneMemberID="viewController"> <layoutGuides> <viewControllerLayoutGuide type="top" id="SYR-Wa-9uf"/> <viewControllerLayoutGuide type="bottom" id="GAO-Cl-Wes"/> </layoutGuides> <view key="view" contentMode="scaleToFill" id="svH-Pt-448"> <rect key="frame" x="0.0" y="0.0" width="600" height="600"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> <label clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" text="Detail view content goes here" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="0XM-y9-sOw"> <rect key="frame" x="20" y="292" width="560" height="17"/> <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> <fontDescription key="fontDescription" type="system" size="system"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/> <nil key="highlightedColor"/> </label> </subviews> <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> <constraints> <constraint firstItem="0XM-y9-sOw" firstAttribute="leading" secondItem="svH-Pt-448" secondAttribute="leading" constant="20" symbolic="YES" id="Tsc-yG-G1q"/> <constraint firstItem="0XM-y9-sOw" firstAttribute="centerY" secondItem="svH-Pt-448" secondAttribute="centerY" id="jWN-iV-94e"/> <constraint firstAttribute="trailing" secondItem="0XM-y9-sOw" secondAttribute="trailing" constant="20" symbolic="YES" id="tHV-ZD-HQj"/> </constraints> </view> <toolbarItems/> <navigationItem key="navigationItem" title="Detail" id="mOI-FS-AaM"/> <connections> <outlet property="detailDescriptionLabel" destination="0XM-y9-sOw" id="deQ-Na-JPF"/> </connections> </viewController> <placeholder placeholderIdentifier="IBFirstResponder" id="FJe-Yq-33r" sceneMemberID="firstResponder"/> </objects> <point key="canvasLocation" x="709" y="129"/> </scene> <!--Split View Controller--> <scene sceneID="Nki-YV-4Qg"> <objects> <splitViewController id="H1p-Uh-vWS" sceneMemberID="viewController"> <toolbarItems/> <connections> <segue destination="RMx-3f-FxP" kind="relationship" relationship="masterViewController" id="BlO-5A-QYV"/> <segue destination="vC3-pB-5Vb" kind="relationship" relationship="detailViewController" id="Tll-UG-LXB"/> </connections> </splitViewController> <placeholder placeholderIdentifier="IBFirstResponder" id="cZU-Oi-B1e" sceneMemberID="firstResponder"/> </objects> <point key="canvasLocation" x="-856" y="-330"/> </scene> <!--Master--> <scene sceneID="smW-Zh-WAh"> <objects> <tableViewController title="Master" clearsSelectionOnViewWillAppear="NO" id="7bK-jq-Zjz" customClass="MasterViewController" sceneMemberID="viewController"> <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="r7i-6Z-zg0"> <rect key="frame" x="0.0" y="0.0" width="600" height="600"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> <prototypes> <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="Cell" textLabel="Arm-wq-HPj" style="IBUITableViewCellStyleDefault" id="WCw-Qf-5nD"> <rect key="frame" x="0.0" y="86" width="600" height="44"/> <autoresizingMask key="autoresizingMask"/> <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="WCw-Qf-5nD" id="37f-cq-3Eg"> <rect key="frame" x="0.0" y="0.0" width="600" height="43.5"/> <autoresizingMask key="autoresizingMask"/> <subviews> <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" text="Title" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Arm-wq-HPj"> <rect key="frame" x="15" y="0.0" width="570" height="43.5"/> <autoresizingMask key="autoresizingMask"/> <fontDescription key="fontDescription" type="boldSystem" pointSize="20"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/> <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/> </label> </subviews> </tableViewCellContentView> <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> <connections> <segue destination="vC3-pB-5Vb" kind="showDetail" identifier="showDetail" id="6S0-TO-JiA"/> </connections> </tableViewCell> </prototypes> <sections/> <connections> <outlet property="dataSource" destination="7bK-jq-Zjz" id="Gho-Na-rnu"/> <outlet property="delegate" destination="7bK-jq-Zjz" id="RA6-mI-bju"/> </connections> </tableView> <navigationItem key="navigationItem" title="Master" id="Zdf-7t-Un8"/> </tableViewController> <placeholder placeholderIdentifier="IBFirstResponder" id="Rux-fX-hf1" sceneMemberID="firstResponder"/> </objects> <point key="canvasLocation" x="709" y="-630"/> </scene> <!--Navigation Controller--> <scene sceneID="r7l-gg-dq7"> <objects> <navigationController id="vC3-pB-5Vb" sceneMemberID="viewController"> <navigationBar key="navigationBar" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="DjV-YW-jjY"> <autoresizingMask key="autoresizingMask"/> </navigationBar> <connections> <segue destination="JEX-9P-axG" kind="relationship" relationship="rootViewController" id="GKi-kA-LjT"/> </connections> </navigationController> <placeholder placeholderIdentifier="IBFirstResponder" id="SLD-UC-DBI" userLabel="First Responder" sceneMemberID="firstResponder"/> </objects> <point key="canvasLocation" x="-45" y="129"/> </scene> </scenes> <inferredMetricsTieBreakers> <segue reference="6S0-TO-JiA"/> </inferredMetricsTieBreakers> </document>

test故事板:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="9532" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" initialViewController="H1p-Uh-vWS"> <dependencies> <deployment identifier="iOS"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9530"/> </dependencies> <scenes> <!--Master--> <scene sceneID="pY4-Hu-kfo"> <objects> <navigationController title="Master" id="RMx-3f-FxP" sceneMemberID="viewController"> <navigationBar key="navigationBar" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="Pmd-2v-anx"> <autoresizingMask key="autoresizingMask"/> </navigationBar> <connections> <segue destination="7bK-jq-Zjz" kind="relationship" relationship="rootViewController" id="tsl-Nk-0bq"/> </connections> </navigationController> <placeholder placeholderIdentifier="IBFirstResponder" id="8fS-aE-onr" sceneMemberID="firstResponder"/> </objects> <point key="canvasLocation" x="-20.266666666666666" y="-596.39999999999998"/> </scene> <!--Detail--> <scene sceneID="yUG-lL-AsK"> <objects> <viewController title="Detail" id="JEX-9P-axG" customClass="DetailViewController" sceneMemberID="viewController"> <view key="view" contentMode="scaleToFill" id="svH-Pt-448"> <rect key="frame" x="0.0" y="0.0" width="320" height="568"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> <label clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" text="Detail view content goes here" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" id="0XM-y9-sOw"> <rect key="frame" x="8" y="262" width="280" height="17"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> <fontDescription key="fontDescription" type="system" size="system"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/> <nil key="highlightedColor"/> </label> </subviews> <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> </view> <toolbarItems/> <navigationItem key="navigationItem" title="Detail" id="mOI-FS-AaM"/> <connections> <outlet property="detailDescriptionLabel" destination="0XM-y9-sOw" id="deQ-Na-JPF"/> </connections> </viewController> <placeholder placeholderIdentifier="IBFirstResponder" id="FJe-Yq-33r" sceneMemberID="firstResponder"/> </objects> <point key="canvasLocation" x="405.86666666666667" y="163.77333333333334"/> </scene> <!--Split View Controller--> <scene sceneID="Nki-YV-4Qg"> <objects> <splitViewController id="H1p-Uh-vWS" sceneMemberID="viewController"> <toolbarItems/> <connections> <segue destination="RMx-3f-FxP" kind="relationship" relationship="masterViewController" id="BlO-5A-QYV"/> <segue destination="vC3-pB-5Vb" kind="relationship" relationship="detailViewController" id="Tll-UG-LXB"/> </connections> </splitViewController> <placeholder placeholderIdentifier="IBFirstResponder" id="cZU-Oi-B1e" sceneMemberID="firstResponder"/> </objects> <point key="canvasLocation" x="-456.5333333333333" y="-312.39999999999998"/> </scene> <!--Master--> <scene sceneID="smW-Zh-WAh"> <objects> <tableViewController title="Master" clearsSelectionOnViewWillAppear="NO" id="7bK-jq-Zjz" customClass="MasterViewController" sceneMemberID="viewController"> <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="r7i-6Z-zg0"> <rect key="frame" x="0.0" y="0.0" width="320" height="568"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> <prototypes> <tableViewCell contentMode="scaleToFill" selectionStyle="blue" accessoryType="disclosureIndicator" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="Cell" textLabel="Arm-wq-HPj" style="IBUITableViewCellStyleDefault" id="WCw-Qf-5nD"> <rect key="frame" x="0.0" y="86" width="320" height="44"/> <autoresizingMask key="autoresizingMask"/> <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="WCw-Qf-5nD" id="37f-cq-3Eg"> <rect key="frame" x="0.0" y="0.0" width="287" height="43.5"/> <autoresizingMask key="autoresizingMask"/> <subviews> <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" text="Title" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Arm-wq-HPj"> <rect key="frame" x="15" y="0.0" width="270" height="43.5"/> <autoresizingMask key="autoresizingMask"/> <fontDescription key="fontDescription" type="boldSystem" pointSize="20"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/> <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/> </label> </subviews> </tableViewCellContentView> <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> <connections> <segue destination="JEX-9P-axG" kind="push" identifier="showDetail" id="6S0-TO-JiA"/> </connections> </tableViewCell> </prototypes> <sections/> <connections> <outlet property="dataSource" destination="7bK-jq-Zjz" id="Gho-Na-rnu"/> <outlet property="delegate" destination="7bK-jq-Zjz" id="RA6-mI-bju"/> </connections> </tableView> <navigationItem key="navigationItem" title="Master" id="Zdf-7t-Un8"/> </tableViewController> <placeholder placeholderIdentifier="IBFirstResponder" id="Rux-fX-hf1" sceneMemberID="firstResponder"/> </objects> <point key="canvasLocation" x="378.13333333333333" y="-596.39999999999998"/> </scene> <!--Navigation Controller--> <scene sceneID="r7l-gg-dq7"> <objects> <navigationController id="vC3-pB-5Vb" sceneMemberID="viewController"> <navigationBar key="navigationBar" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="DjV-YW-jjY"> <autoresizingMask key="autoresizingMask"/> </navigationBar> <connections> <segue destination="JEX-9P-axG" kind="relationship" relationship="rootViewController" id="GKi-kA-LjT"/> </connections> </navigationController> <placeholder placeholderIdentifier="IBFirstResponder" id="SLD-UC-DBI" userLabel="First Responder" sceneMemberID="firstResponder"/> </objects> <point key="canvasLocation" x="-24" y="122.12"/> </scene> </scenes> <inferredMetricsTieBreakers> <segue reference="6S0-TO-JiA"/> </inferredMetricsTieBreakers> </document>

因此,当我启动test ,我收到此错误消息:

2016-02-16 15:40:58.960 test[75054:13748065] -[DetailViewController topViewController]: unrecognized selector sent to instance 0x7fbe82c3c480 2016-02-16 15:40:58.964 test[75054:13748065] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[DetailViewController topViewController]: unrecognized selector sent to instance 0x7fbe82c3c480' *** First throw call stack: ( 0 CoreFoundation 0x000000010ed14e65 __exceptionPreprocess + 165 1 libobjc.A.dylib 0x000000010e78ddeb objc_exception_throw + 48 2 CoreFoundation 0x000000010ed1d48d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205 3 CoreFoundation 0x000000010ec6a90a ___forwarding___ + 970 4 CoreFoundation 0x000000010ec6a4b8 _CF_forwarding_prep_0 + 120 5 test 0x000000010e28c459 -[MasterViewController prepareForSegue:sender:] + 377 6 UIKit 0x000000010f7eaf01 -[UIStoryboardSegueTemplate _performWithDestinationViewController:sender:] + 369 7 UIKit 0x000000010f7ead5f -[UIStoryboardSegueTemplate _perform:] + 82 8 UIKit 0x000000010f7eb023 -[UIStoryboardSegueTemplate perform:] + 156 9 UIKit 0x000000010f204cee -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 1775 10 UIKit 0x000000010f204fb3 -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 388 11 UIKit 0x000000010f0cd4a2 _runAfterCACommitDeferredBlocks + 317 12 UIKit 0x000000010f0e0c01 _cleanUpAfterCAFlushAndRunDeferredBlocks + 95 13 UIKit 0x000000010f0ecaf3 _afterCACommitHandler + 90 14 CoreFoundation 0x000000010ec40367 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23 15 CoreFoundation 0x000000010ec402d7 __CFRunLoopDoObservers + 391 16 CoreFoundation 0x000000010ec35f2b __CFRunLoopRun + 1147 17 CoreFoundation 0x000000010ec35828 CFRunLoopRunSpecific + 488 18 GraphicsServices 0x00000001124d1ad2 GSEventRunModal + 161 19 UIKit 0x000000010f0c1610 UIApplicationMain + 171 20 test 0x000000010e28cc3f main + 111 21 libdyld.dylib 0x000000011145092d start + 1 22 ??? 0x0000000000000001 0x0 + 1 ) libc++abi.dylib: terminating with uncaught exception of type NSException (lldb)

几乎所有我的程序都是一样的,所以也许我还没有理解视图控制器是如何工作的......我以为我有。 你知道它为什么会这样崩溃吗?

I have two Xcode projects, the first called blank, new and using auto layout (default). The second is called test and is not using auto layout (iPhone layout instead).

On the test project, the method prepareForSegue crashes :

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([[segue identifier] isEqualToString:@"showDetail"]) { NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; NSDate *object = self.objects[indexPath.row]; /*The program crashed here */ DetailViewController *controller = (DetailViewController *)[[segue destinationViewController] topViewController]; [controller setDetailItem:object]; controller.navigationItem.leftBarButtonItem = self.splitViewController.displayModeButtonItem; controller.navigationItem.leftItemsSupplementBackButton = YES; } }

There are no differences in the code between the two project except in the XML file of the storyboard.

Storyboard of blank :

<?xml version="1.0" encoding="UTF-8" standalone="no"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="9532" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="H1p-Uh-vWS"> <dependencies> <deployment identifier="iOS"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9530"/> </dependencies> <scenes> <!--Master--> <scene sceneID="pY4-Hu-kfo"> <objects> <navigationController title="Master" id="RMx-3f-FxP" sceneMemberID="viewController"> <navigationBar key="navigationBar" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="Pmd-2v-anx"> <autoresizingMask key="autoresizingMask"/> </navigationBar> <connections> <segue destination="7bK-jq-Zjz" kind="relationship" relationship="rootViewController" id="tsl-Nk-0bq"/> </connections> </navigationController> <placeholder placeholderIdentifier="IBFirstResponder" id="8fS-aE-onr" sceneMemberID="firstResponder"/> </objects> <point key="canvasLocation" x="-38" y="-630"/> </scene> <!--Detail--> <scene sceneID="yUG-lL-AsK"> <objects> <viewController title="Detail" id="JEX-9P-axG" customClass="DetailViewController" sceneMemberID="viewController"> <layoutGuides> <viewControllerLayoutGuide type="top" id="SYR-Wa-9uf"/> <viewControllerLayoutGuide type="bottom" id="GAO-Cl-Wes"/> </layoutGuides> <view key="view" contentMode="scaleToFill" id="svH-Pt-448"> <rect key="frame" x="0.0" y="0.0" width="600" height="600"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> <label clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" text="Detail view content goes here" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="0XM-y9-sOw"> <rect key="frame" x="20" y="292" width="560" height="17"/> <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> <fontDescription key="fontDescription" type="system" size="system"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/> <nil key="highlightedColor"/> </label> </subviews> <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> <constraints> <constraint firstItem="0XM-y9-sOw" firstAttribute="leading" secondItem="svH-Pt-448" secondAttribute="leading" constant="20" symbolic="YES" id="Tsc-yG-G1q"/> <constraint firstItem="0XM-y9-sOw" firstAttribute="centerY" secondItem="svH-Pt-448" secondAttribute="centerY" id="jWN-iV-94e"/> <constraint firstAttribute="trailing" secondItem="0XM-y9-sOw" secondAttribute="trailing" constant="20" symbolic="YES" id="tHV-ZD-HQj"/> </constraints> </view> <toolbarItems/> <navigationItem key="navigationItem" title="Detail" id="mOI-FS-AaM"/> <connections> <outlet property="detailDescriptionLabel" destination="0XM-y9-sOw" id="deQ-Na-JPF"/> </connections> </viewController> <placeholder placeholderIdentifier="IBFirstResponder" id="FJe-Yq-33r" sceneMemberID="firstResponder"/> </objects> <point key="canvasLocation" x="709" y="129"/> </scene> <!--Split View Controller--> <scene sceneID="Nki-YV-4Qg"> <objects> <splitViewController id="H1p-Uh-vWS" sceneMemberID="viewController"> <toolbarItems/> <connections> <segue destination="RMx-3f-FxP" kind="relationship" relationship="masterViewController" id="BlO-5A-QYV"/> <segue destination="vC3-pB-5Vb" kind="relationship" relationship="detailViewController" id="Tll-UG-LXB"/> </connections> </splitViewController> <placeholder placeholderIdentifier="IBFirstResponder" id="cZU-Oi-B1e" sceneMemberID="firstResponder"/> </objects> <point key="canvasLocation" x="-856" y="-330"/> </scene> <!--Master--> <scene sceneID="smW-Zh-WAh"> <objects> <tableViewController title="Master" clearsSelectionOnViewWillAppear="NO" id="7bK-jq-Zjz" customClass="MasterViewController" sceneMemberID="viewController"> <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="r7i-6Z-zg0"> <rect key="frame" x="0.0" y="0.0" width="600" height="600"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> <prototypes> <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="Cell" textLabel="Arm-wq-HPj" style="IBUITableViewCellStyleDefault" id="WCw-Qf-5nD"> <rect key="frame" x="0.0" y="86" width="600" height="44"/> <autoresizingMask key="autoresizingMask"/> <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="WCw-Qf-5nD" id="37f-cq-3Eg"> <rect key="frame" x="0.0" y="0.0" width="600" height="43.5"/> <autoresizingMask key="autoresizingMask"/> <subviews> <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" text="Title" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Arm-wq-HPj"> <rect key="frame" x="15" y="0.0" width="570" height="43.5"/> <autoresizingMask key="autoresizingMask"/> <fontDescription key="fontDescription" type="boldSystem" pointSize="20"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/> <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/> </label> </subviews> </tableViewCellContentView> <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> <connections> <segue destination="vC3-pB-5Vb" kind="showDetail" identifier="showDetail" id="6S0-TO-JiA"/> </connections> </tableViewCell> </prototypes> <sections/> <connections> <outlet property="dataSource" destination="7bK-jq-Zjz" id="Gho-Na-rnu"/> <outlet property="delegate" destination="7bK-jq-Zjz" id="RA6-mI-bju"/> </connections> </tableView> <navigationItem key="navigationItem" title="Master" id="Zdf-7t-Un8"/> </tableViewController> <placeholder placeholderIdentifier="IBFirstResponder" id="Rux-fX-hf1" sceneMemberID="firstResponder"/> </objects> <point key="canvasLocation" x="709" y="-630"/> </scene> <!--Navigation Controller--> <scene sceneID="r7l-gg-dq7"> <objects> <navigationController id="vC3-pB-5Vb" sceneMemberID="viewController"> <navigationBar key="navigationBar" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="DjV-YW-jjY"> <autoresizingMask key="autoresizingMask"/> </navigationBar> <connections> <segue destination="JEX-9P-axG" kind="relationship" relationship="rootViewController" id="GKi-kA-LjT"/> </connections> </navigationController> <placeholder placeholderIdentifier="IBFirstResponder" id="SLD-UC-DBI" userLabel="First Responder" sceneMemberID="firstResponder"/> </objects> <point key="canvasLocation" x="-45" y="129"/> </scene> </scenes> <inferredMetricsTieBreakers> <segue reference="6S0-TO-JiA"/> </inferredMetricsTieBreakers> </document>

Storyboard of test:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="9532" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" initialViewController="H1p-Uh-vWS"> <dependencies> <deployment identifier="iOS"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9530"/> </dependencies> <scenes> <!--Master--> <scene sceneID="pY4-Hu-kfo"> <objects> <navigationController title="Master" id="RMx-3f-FxP" sceneMemberID="viewController"> <navigationBar key="navigationBar" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="Pmd-2v-anx"> <autoresizingMask key="autoresizingMask"/> </navigationBar> <connections> <segue destination="7bK-jq-Zjz" kind="relationship" relationship="rootViewController" id="tsl-Nk-0bq"/> </connections> </navigationController> <placeholder placeholderIdentifier="IBFirstResponder" id="8fS-aE-onr" sceneMemberID="firstResponder"/> </objects> <point key="canvasLocation" x="-20.266666666666666" y="-596.39999999999998"/> </scene> <!--Detail--> <scene sceneID="yUG-lL-AsK"> <objects> <viewController title="Detail" id="JEX-9P-axG" customClass="DetailViewController" sceneMemberID="viewController"> <view key="view" contentMode="scaleToFill" id="svH-Pt-448"> <rect key="frame" x="0.0" y="0.0" width="320" height="568"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> <label clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" text="Detail view content goes here" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" id="0XM-y9-sOw"> <rect key="frame" x="8" y="262" width="280" height="17"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> <fontDescription key="fontDescription" type="system" size="system"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/> <nil key="highlightedColor"/> </label> </subviews> <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> </view> <toolbarItems/> <navigationItem key="navigationItem" title="Detail" id="mOI-FS-AaM"/> <connections> <outlet property="detailDescriptionLabel" destination="0XM-y9-sOw" id="deQ-Na-JPF"/> </connections> </viewController> <placeholder placeholderIdentifier="IBFirstResponder" id="FJe-Yq-33r" sceneMemberID="firstResponder"/> </objects> <point key="canvasLocation" x="405.86666666666667" y="163.77333333333334"/> </scene> <!--Split View Controller--> <scene sceneID="Nki-YV-4Qg"> <objects> <splitViewController id="H1p-Uh-vWS" sceneMemberID="viewController"> <toolbarItems/> <connections> <segue destination="RMx-3f-FxP" kind="relationship" relationship="masterViewController" id="BlO-5A-QYV"/> <segue destination="vC3-pB-5Vb" kind="relationship" relationship="detailViewController" id="Tll-UG-LXB"/> </connections> </splitViewController> <placeholder placeholderIdentifier="IBFirstResponder" id="cZU-Oi-B1e" sceneMemberID="firstResponder"/> </objects> <point key="canvasLocation" x="-456.5333333333333" y="-312.39999999999998"/> </scene> <!--Master--> <scene sceneID="smW-Zh-WAh"> <objects> <tableViewController title="Master" clearsSelectionOnViewWillAppear="NO" id="7bK-jq-Zjz" customClass="MasterViewController" sceneMemberID="viewController"> <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="r7i-6Z-zg0"> <rect key="frame" x="0.0" y="0.0" width="320" height="568"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> <prototypes> <tableViewCell contentMode="scaleToFill" selectionStyle="blue" accessoryType="disclosureIndicator" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="Cell" textLabel="Arm-wq-HPj" style="IBUITableViewCellStyleDefault" id="WCw-Qf-5nD"> <rect key="frame" x="0.0" y="86" width="320" height="44"/> <autoresizingMask key="autoresizingMask"/> <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="WCw-Qf-5nD" id="37f-cq-3Eg"> <rect key="frame" x="0.0" y="0.0" width="287" height="43.5"/> <autoresizingMask key="autoresizingMask"/> <subviews> <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" text="Title" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Arm-wq-HPj"> <rect key="frame" x="15" y="0.0" width="270" height="43.5"/> <autoresizingMask key="autoresizingMask"/> <fontDescription key="fontDescription" type="boldSystem" pointSize="20"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/> <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/> </label> </subviews> </tableViewCellContentView> <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> <connections> <segue destination="JEX-9P-axG" kind="push" identifier="showDetail" id="6S0-TO-JiA"/> </connections> </tableViewCell> </prototypes> <sections/> <connections> <outlet property="dataSource" destination="7bK-jq-Zjz" id="Gho-Na-rnu"/> <outlet property="delegate" destination="7bK-jq-Zjz" id="RA6-mI-bju"/> </connections> </tableView> <navigationItem key="navigationItem" title="Master" id="Zdf-7t-Un8"/> </tableViewController> <placeholder placeholderIdentifier="IBFirstResponder" id="Rux-fX-hf1" sceneMemberID="firstResponder"/> </objects> <point key="canvasLocation" x="378.13333333333333" y="-596.39999999999998"/> </scene> <!--Navigation Controller--> <scene sceneID="r7l-gg-dq7"> <objects> <navigationController id="vC3-pB-5Vb" sceneMemberID="viewController"> <navigationBar key="navigationBar" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="DjV-YW-jjY"> <autoresizingMask key="autoresizingMask"/> </navigationBar> <connections> <segue destination="JEX-9P-axG" kind="relationship" relationship="rootViewController" id="GKi-kA-LjT"/> </connections> </navigationController> <placeholder placeholderIdentifier="IBFirstResponder" id="SLD-UC-DBI" userLabel="First Responder" sceneMemberID="firstResponder"/> </objects> <point key="canvasLocation" x="-24" y="122.12"/> </scene> </scenes> <inferredMetricsTieBreakers> <segue reference="6S0-TO-JiA"/> </inferredMetricsTieBreakers> </document>

So when I launch test, I got this error message :

2016-02-16 15:40:58.960 test[75054:13748065] -[DetailViewController topViewController]: unrecognized selector sent to instance 0x7fbe82c3c480 2016-02-16 15:40:58.964 test[75054:13748065] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[DetailViewController topViewController]: unrecognized selector sent to instance 0x7fbe82c3c480' *** First throw call stack: ( 0 CoreFoundation 0x000000010ed14e65 __exceptionPreprocess + 165 1 libobjc.A.dylib 0x000000010e78ddeb objc_exception_throw + 48 2 CoreFoundation 0x000000010ed1d48d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205 3 CoreFoundation 0x000000010ec6a90a ___forwarding___ + 970 4 CoreFoundation 0x000000010ec6a4b8 _CF_forwarding_prep_0 + 120 5 test 0x000000010e28c459 -[MasterViewController prepareForSegue:sender:] + 377 6 UIKit 0x000000010f7eaf01 -[UIStoryboardSegueTemplate _performWithDestinationViewController:sender:] + 369 7 UIKit 0x000000010f7ead5f -[UIStoryboardSegueTemplate _perform:] + 82 8 UIKit 0x000000010f7eb023 -[UIStoryboardSegueTemplate perform:] + 156 9 UIKit 0x000000010f204cee -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 1775 10 UIKit 0x000000010f204fb3 -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 388 11 UIKit 0x000000010f0cd4a2 _runAfterCACommitDeferredBlocks + 317 12 UIKit 0x000000010f0e0c01 _cleanUpAfterCAFlushAndRunDeferredBlocks + 95 13 UIKit 0x000000010f0ecaf3 _afterCACommitHandler + 90 14 CoreFoundation 0x000000010ec40367 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23 15 CoreFoundation 0x000000010ec402d7 __CFRunLoopDoObservers + 391 16 CoreFoundation 0x000000010ec35f2b __CFRunLoopRun + 1147 17 CoreFoundation 0x000000010ec35828 CFRunLoopRunSpecific + 488 18 GraphicsServices 0x00000001124d1ad2 GSEventRunModal + 161 19 UIKit 0x000000010f0c1610 UIApplicationMain + 171 20 test 0x000000010e28cc3f main + 111 21 libdyld.dylib 0x000000011145092d start + 1 22 ??? 0x0000000000000001 0x0 + 1 ) libc++abi.dylib: terminating with uncaught exception of type NSException (lldb)

It's the same with almost all my programs, so maybe I have not understood how view controllers work... I thought I had. Do you know why it's crashing like that ?

最满意答案

由于自动布局而不是大小类,因此不会发生这种情况。 使用Size Classes,您的segue类型为Show Detail,并指向具有DetailViewController作为根视图控制器的UINavigationController。 当您禁用自动布局时,默认情况下禁用大小类,并且您的显示详细信息segue会自动转换为直接指向DetailViewController而不是UINavigationController的Push segue。

所以,

DetailViewController *controller = (DetailViewController *)[[segue destinationViewController] topViewController];

将无法工作,因为您现在正在处理DetailViewController的实例而不是UINavigationController。 topViewController是一个消息,您可以发送到UINavigationController,但不能发送给DetailViewController。

尝试

DetailViewController *controller = (DetailViewController *)[segue destinationViewController];

代替。

请参阅屏幕截图以便更好地理解。

使用大小类

没有大小类

This doesn't happen because of Auto Layout but Size Classes. With Size Classes, your segue was of type Show Detail and was pointing to the UINavigationController that have DetailViewController as root view controller. When you disable Auto Layout you disable Size Classes by default, and your Show Detail segue is automatically converted to a Push segue pointing directly at DetailViewController and not UINavigationController anymore.

So,

DetailViewController *controller = (DetailViewController *)[[segue destinationViewController] topViewController];

won't work, because you are now dealing with an instance of DetailViewController and not UINavigationController. topViewController is a message that you can send to UINavigationController, but not DetailViewController.

Try

DetailViewController *controller = (DetailViewController *)[segue destinationViewController];

instead.

See the screenshots for better understanding.

With Size Classes

Without Size Classes

更多推荐

本文发布于:2023-08-03 14:14:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1390223.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:布局   PrepareForSege   crash   auto   layout

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!