- (IBAction)SwitchView:(id)sender {
SecondView *second = [[SecondView alloc] initWithNibName:nil bundle:nil];
[self presentViewController:second animated:YES completion:NULL];
}
點擊按鈕後模擬器直接退出,無異常日誌。
SecondView 無對應 xib,會嘗試加載同名 xib 失敗,導致 view 為 nil,present 時崩潰。UIView 卻嘗試 present,運行時會拋出 NSInvalidArgumentException。- (IBAction)SwitchView:(id)sender {
// 1. 純代碼創建,不依賴 nib
SecondViewController *second = [[SecondViewController alloc] init];
// 2. 確保是 UIViewController 子類
[self presentViewController:second animated:YES completion:nil];
}
SecondViewController : UIViewController(注意拼寫)。loadView 或 viewDidLoad 構建 UI,而非依賴 xib。presentViewController:animated:completion: 在某些設備上 completion 為 NULL 會崩潰 → 傳 ^{} 空 Block 代替。Console 輸出:即使模擬器關閉,Xcode 控制台仍保留崩潰堆疊。崩潰 90% 因「非 VC 類 present」或「nib 加載失敗」。改用 init 純代碼創建 VC,傳入空 Block 兼容舊版模擬器,即可穩定復現。