![](/img/trans.png)
[英]Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - perhaps the designated entry point is not set?
[英]Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - perhaps the designated entry point is not set?
我在新創建的應用程序中使用 Xcode,當我運行該項目時,它沒有顯示在 iOS 模擬器中,我收到以下消息:
未能為 UIMainStoryboardFile 'Main' 實例化默認視圖 controller - 也許未設置指定的入口點?
當然,我用谷歌搜索了一下,每個人都指出這是因為 Xcode 還不知道哪個視圖 controller 是初始視圖。 但奇怪的是,我將應用程序創建為基於頁面的應用程序(也嘗試了單視圖和選項卡式應用程序選項)應用程序和 Xcode 已經為它定義了一個 Storyboard。
此外,當我將 go 設置為項目的主界面選項時,設置了 storyboard(由 Xcode 本身命名為“Main”),並且在 Storyboard 中,我的視圖 controller 被設置為“初始視圖控制器”
怎么了?
在屬性檢查器中檢查是初始視圖控制器。
所以這也發生在我身上。 我檢查了 50 次並且檢查了我的“是初始視圖控制器”,相信我。 它突然發生了。 那我是怎么修復的呢?
首先單擊右側實用工具欄中的視圖控制器。 接下來選擇Attributes Inspector並確保在 View Controller 部分下選中了“Is Initial View Controller”復選框!
如果您有以下代碼,也會報告此警告:
window = UIWindow(frame: UIScreen.mainScreen().bounds)
window?.rootViewController = myAwesomeRootViewController
window?.makeKeyAndVisible()
在這種情況下,轉到目標設置的第一頁並將Main Interface
設置為空,因為您的應用程序不需要故事板條目。
我的 Tab Bar Controller 沒有出現在模擬器中並出現黑屏時,我遇到過這種情況。 為了讓我的應用程序出現在模擬器中,我執行了以下操作。
Is Initial View Controller
。如果您不小心刪除了該視圖控制器,或者以其他方式將其設為默認值,那么您將看到錯誤“無法實例化 UIMainStoryboardFile 'Main' 的默認視圖控制器 - 可能未設置指定的入口點?” 當您的應用程序啟動時,伴隨着純黑的屏幕。
要解決這個問題,打開你的 Main.storyboard 文件,找到你想在你的應用程序第一次運行時顯示的視圖控制器。 選中后,轉到屬性檢查器並選中標記為“是初始視圖控制器”的框。 您應該會看到一個向右的箭頭出現在該視圖控制器的左側,表明它是故事板的入口點。
使用界面生成器:
檢查是否設置了“是初始視圖控制器”。 您可以使用以下步驟進行設置:
如果您已完成此步驟但仍出現錯誤uncheck and do it again.
以編程方式使用:
目標-C:
self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"HomeViewController"]; // <storyboard id>
self.window.rootViewController = viewController;
[self.window makeKeyAndVisible];
return YES;
斯威夫特:
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
var objMainViewController: MainViewController = mainStoryboard.instantiateViewControllerWithIdentifier("MainController") as! MainViewController
self.window?.rootViewController = objMainViewController
self.window?.makeKeyAndVisible()
return true
手動設置窗口,
- (void)applicationDidBecomeActive:(UIApplication *)application
{
if (!application.keyWindow.rootViewController)
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *myViewController= [storyboard instantiateViewControllerWithIdentifier:@"myViewController identifier"];
application.keyWindow.rootViewController = myViewController;
}
}
當我將故事板文件名“ Main.storyboard ”更改為:“ XXX.storyboard ”時出現此錯誤
我的解決方案是:
祝你好運
產品“清潔”是我的解決方案。
第一個選項
如果您想設置自定義故事板而不是默認視圖控制器。
從 info.plist 文件更改此屬性
<key>UISceneStoryboardFile</key> <string>Onboarding</string>
入職將是您的故事板名稱
打開這個右鍵單擊 info.plist 文件並作為源代碼打開
第二個選項
1- 單擊您的項目
2- 從目標部分選擇您的項目
3- 移至部署界面部分
4- 從主界面字段更改您的故事板部分
請記住設置您的故事板初始視圖控制器
如果您一直定期將代碼提交到源代碼管理,這可能會為您省去創建新故事板的麻煩,並可能會引入更多問題......
我能夠通過比較與損壞版本工作的版本的 Git 源代碼來解決這個問題。 差異顯示第一行應該包含初始視圖控制器的 Id,在我的例子中, initialViewController="Q7U-eo-vxw" 。 我搜索了源代碼以確保該 ID 存在。 我所要做的就是把它放回去,一切又恢復了!
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="5056" systemVersion="13E28" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" initialViewController="Q7U-eo-vxw">
<dependencies>
<deployment defaultVersion="1296" identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/>
</dependencies>
<scenes>
以下是一些可以幫助您排除故障的步驟:
檢查 AppDelegate 中是否有窗口變量。
var window: UIWindow?
還要檢查您的 Info.plist 文件的故事板。
<key>UIMainStoryboardFile</key>
<string>Main</string>
在 AppDelegate 中以編程方式設置 rootViewController 不會修復警告。 您應該選擇是讓故事板設置視圖控制器還是以編程方式進行。
在 Xcode 11 及更高版本中創建的項目,僅從項目設置更改主界面文件是不夠的。
您必須手動編輯 Info.plist 文件並為UISceneStoryboardFile
設置故事板名稱。
如果您不使用 storyboard
打開info.plist 在info.plist文件中刪除如下特征 Information Property List -> Scene configuration -> Application Session Role -> Item 0 -> StoryBoard Name
如果你有場景委托,你必須檢查 info.plist
<key>UIApplicationSceneManifest</key>
<dict>
<key>UIApplicationSupportsMultipleScenes</key>
<false/>
<key>UISceneConfigurations</key>
<dict>
<key>UIWindowSceneSessionRoleApplication</key>
<array>
<dict>
<key>UISceneConfigurationName</key>
<string>Default Configuration</string>
<key>UISceneDelegateClassName</key>
<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
<key>UISceneStoryboardFile</key>
<string>Login</string>
</dict>
</array>
</dict>
</dict>
我在這里加載名為 Login.storyboard 的故事板
如果您創建了一個名稱不是“Main”的新故事板,則會出現一些問題,但很容易調整......
因此,在您創建了一個具有所需名稱的新故事板並希望將其用作主要故事之后,請執行以下操作:
在 XCode 14.0.1 中對我有用的是,除了設置初始視圖 controller 之外,還更新了構建設置:“UIKIT Main Storyboard File Base Name”為新名稱 storyboard
對於未來的讀者:- iOS 13、Swift 5
我從SceneDelegate以編程方式設置了初始視圖 controller,我得到了這個作為警告並且視圖 controller 設置完美。 所以我從Info.plist 中刪除了 Storyboard Name並且警告永遠消失了。
info.plist > Application Scene Manifest > Scene Configuration > Application Session Role > Storyboard Name > 刪除這個
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.