簡體   English   中英

Xcode 6 Bug:Interface Builder 文件中的未知類

[英]Xcode 6 Bug: Unknown class in Interface Builder file

我升級到 Xcode 6 beta 4,現在我的應用程序不斷崩潰並顯示消息

Interface Builder 文件中的未知類 X。

它崩潰是因為據說 Xcode 找不到我在 Storyboard 中鏈接的自定義類,但它表明它們在 Xcode 界面中正確鏈接。

我很肯定一切都正確鏈接。 我唯一的其他選擇可能是刪除整個故事板文件並從頭開始,因為它可能以某種方式損壞。

編輯:我還想補充一點,我嘗試過清理、重置模擬器、搞亂構建階段等。這些都不起作用。

我在輸入問題時解決了這個問題。 我想我會回答我的問題,並將其留給在使用 Xcode 6 beta 4 時可能遇到此問題的其他任何人。

要解決此問題,您需要在 Storyboard 中選擇每個自定義類對象(這包括任何自定義視圖,甚至自定義視圖控制器本身)。

然后選擇這些對象,打開身份檢查器,在“自定義類”下,您應該會看到模塊選項。 最后:

  • 在“模塊”文本框內單擊,然后按 Enter。
  • 或者(2022 年更新) ,選中“從目標繼承模塊”選項。

而已! 我所有自定義對象的當前模塊必須在 Xcode 6 beta 4 中以某種方式在內部錯誤地設置。但是在檢查器中沒有視覺指示。

請注意,如果在 Module 文本框中按 enter 不起作用,請嘗試選擇右側的箭頭並手動選擇當前模塊,然后清除文本框並按 enter。 您也可以嘗試在類文本框中按 Enter(盡管這通常是為了解決不同的問題)。

這是一張使事情更清楚的圖像:在此處輸入圖像描述

有時 Xcode 會錯過customModule="AppName" customModuleProvider="target"

要修復它,請將情節提要作為源代碼打開並替換此行:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
sceneMemberID="viewController">

對此:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
 customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">

重命名 swift 類后我遇到了這個問題。 通過使用@objc 指令解決了這個問題:

@objc(ForumTopicListViewController) class ForumTopicListViewController

具有多個目標的項目

就我而言,我正在處理具有多個目標的項目,問題是“從目標繼承”未選中。 選擇“從目標繼承”解決了我的問題

在此處輸入圖像描述

這對我有用..

檢查您的編譯源,是否添加了該文件(例如 ViewController.m),在我的情況下,未添加 ViewController 文件,因此它給了我錯誤..

在此處輸入圖像描述

這可能發生在任何高於 6.0 的 Xcode 中。 在 Swift 項目中重命名一些 ViewController 類后發生在我身上(但我猜它也會發生在 Obj-C 上)。 您只需要打開界面構建器,轉到已重命名其類的 ViewController 的 Identity Inspector,選擇類並按 Enter。 這會將重命名的類重新分配給選定的 ViewController,並重置重命名類后丟失的模塊值。

Xcode 8.1 的更新(也可能是 8.0):

Xcode 8.1 只是崩潰了。 簡單而煩人的只是崩潰並且不打印任何內容。 我追了一個小時的幻覺崩潰只是為了發現它是同樣的事情 - IB中未分配的課程。 如果您遇到一些幻像崩潰,請先仔細檢查 IB 是否有未分配的課程。

啟用Inherit Module From Target采用了正確的目標模塊。 這解決了這個問題。

在此處輸入圖像描述

有時,您提供的控制器會從當前應用程序中失去其目標成員資格。 在這種情況下,在“模塊”字段上按 Enter 鍵將無濟於事。 轉到控制器並確保它已將目標成員資格設置為當前應用程序。

我的回答:將自定義模塊設置為等於自定義 Pod 名稱(在我的示例中 - 自定義類名),如附加的屏幕截圖所示

此解決方案適用於特定情況:來自Pod (或Carthage )框架的自定義視圖類。

基礎設施:XCode8、Swift3

在此處輸入圖像描述

為我的Custom Class選擇合適的Module我解決了這個問題。

這里是 :

在此處輸入圖像描述

我通過與 ChikabuZ 建議的完全相反的方式修復它(不過,感謝您指出)。 在情節提要文件中,找到以下內容:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass" customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">

並將其替換為:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass" sceneMemberID="viewController">

我無法相信我在解決 Swift 編譯器和 Xcode 6 中的錯誤時浪費了多少時間

我在Xcode 8中遇到了這個問題,要解決它,我必須在文本編輯器中修改故事板。

通常,查找您的控件並從控件實體中刪除customModulecustomModuleProvider

為我做了一個伎倆。

我有同樣的問題。

就我而言,Xcode 沒有將我的自定義類添加到:Target > Build Phase > Compile Sources。

因此,我建議您驗證您的 CustomClass.m 是否存在。

在此處輸入圖像描述

我希望這可以幫助你。

您需要選中“從目標繼承模塊”復選框

在此處輸入圖像描述

當我從我的項目中刪除Main.storyboardLaunchScreen.xib文件和默認的ViewController類時,我在 Xcode 6.1 中遇到了這個問題。

我通過從Info.plist刪除Launch Screen FileMain Interface條目來修復它

檢查您的班級是否有正確的Target Membership

我到處搜索這個。 直到我遇到 1 個要求我將項目文件夾移動到桌面的家伙之前,沒有一個答案對我有用。 它只是自動工作。 顯然,如果您將項目文件夾深入到許多文件夾中,XCODE 實際上會中斷。

這些步驟對我有用。

1) 清除派生數據。
2) 刪除 .h 和 .m 文件
3) 再次創建 .h 和 .m 文件

我通過將我的故事板文件作為源代碼打開並使用 command-F 搜索我的未知類並刪除與之關聯的自定義類來解決這個問題。

@gfrs 說的是正確的,您需要設置模塊。 但是,我曾經遇到過一個問題,即我的班級沒有在Class下拉列表中列出。 最終我刪除了 swift 文件,重新啟動了 Xcode 並重新創建了文件。 最后,該類被列出並且可以在 Storyboard 中使用。

也看看這個答案,它看起來像是解決了我遇到的“真正的”問題。

我通過在所有視圖控制器和視圖的身份檢查器的自定義類中輸入模塊名稱(不幸的是,下拉列表將不顯示任何內容...)解決了這個問題。

您可能還需要指明目標提供者。 為了實現這個目標,您可以在源代碼模式下打開情節提要,並在 ViewController 和 View 尖括號中添加“customModuleProvider”屬性。

我的解決方案(Xcode 8.1 Swift 3.0):

Interface Builder 文件中的未知類xxx

打開 StoryBoard 作為源代碼並搜索xxx 刪除包含值xxx的屬性。 構建並運行。

就我而言,我在項目設置中的Other Linker Flags中添加了一個標志-ObjC以使其工作。 我也嘗試使用-all_load標志,它也運行良好。

在此處輸入圖像描述

就我而言,Storyboard / xib 中引用的沒有設置目標成員資格

要解決此問題,請為該類的.h.m文件提供與其他類相同的目標成員資格。

未設置目標成員資格。

我的解決方案是從自定義類定義中刪除 @objc。

我對 Xcode 6.1 版(6A1052d)也有同樣的問題。 我認為如果您重命名了 App / Xcode 項目,就會出現問題。

我的解決方案是在界面生成器中手動添加模塊名稱。

當我將故事板從 Swift 項目移植到 Objective-c 項目時,我遇到了這個問題,注意到vvkuznetsov 的回答,結果證明這兩個項目使用相同的標識符。 我“產品 -> 清潔”並點擊模塊和類文本字段上的 Enter 鍵。 問題消失了。

我按照勞拉的建議解決了這個問題,但我不需要重新創建文件。

使用 XCode 4,在 Project Navigator 中,選擇包含它所抱怨的類的 .m 文件

轉到查看->實用程序->顯示文件檢查器(這將在右側顯示文件檢查器,帶有 .m 文件信息)

打開 Target Membership 部分並確保為此 .m 文件選擇了您的目標

當我將我的 .m 文件添加到我的項目時,由於某種原因它沒有將它添加到我的默認目標中,這導致我收到你提到的錯誤。

我的問題是用戶錯誤。 我的故事板和身份檢查器的自定義類部分中有一個通用 UIView,我不小心將名稱從 UIView 更改為亂碼。

只需將其改回 UIView 即可。

只對我有用的實際上是將模塊名稱添加到 xib 文件中......

Sooo,xib 文件如下所示:

mymodule.MyViewController.xib (Module being the name of the proyect, usually)

在我看來,這是一個可怕的解決方案,但這應該是蘋果希望我們現在這樣做的方式。

這個問題在 beta 4 中顯示了 3 種可能的解決方法……顯然,根據某些人的說法,Apple 在這種情況下並沒有太大幫助,因為他們稱之為“按預期工作”。

添加新目標后我遇到了這個問題,然后使用“新文件”對話框創建了一個新類,但意外未能在創建對話框中檢查新目標以及原始目標,因此該對象僅添加到我的原來的目標。 解決方案是刪除源文件(僅刪除參考),然后使用“添加文件”將它們添加回來,這次檢查兩個目標。

解決方案對我來說是不同的。 您需要將類的 .m 添加到目標的構建階段編譯源中。

希望這可以幫助!

選擇您的未知類文件,打開文件檢查器選項卡,在Target Membership中檢查您的目標名稱。 你去吧。

發生在我身上是因為我的項目被稱為“ä,ü,ö”

當我從基於視圖的新項目中刪除已包含的 ViewController.h 和 ViewController.m 文件並從情節提要中刪除與此類相關的場景時,我在 Xcode 6 上遇到了這樣的問題,Xcode 將這些文件兌現到派生數據文件夾中,因此,如果您嘗試轉到 Window -> Projects -> your_project 並刪除派生數據,一切都會好起來的。

不要在項目名稱中使用空格,否則自定義類將找不到您自己的類。

當我創建一個同名的項目時,我遇到了一個問題,該項目已經存在於我的項目目錄中(盡管它在前一段時間被刪除了)。 我在那里寫了我的解決方案https://stackoverflow.com/a/27763697/1654692

它發生在我身上,因為我的班級被標記為@objc ,並且在 sotryboard 中找不到該模塊。 刪除@objc解決了問題

我有同樣的問題,但不一樣的修復。

項目文件夾有點損壞,所以我不得不將我的項目文件夾復制到另一個文件夾,例如你的桌面,然后打開項目。

當它打開時,轉到您的界面構建器項目,您將看到他識別您的腳本,然后您確實單擊腳本的名稱並按 Enter,您將看到模塊輸入將自行填充。

它會像魅力一樣起作用! :D

沒有其他方法時,這對我有用。 從終端的項目目錄中:

[~/Developer/MyProject] grep -rn ViewController * | grep -i xib 

在 Xcode 中將匹配的文件作為源代碼打開,並將 ViewController 的任何實例更改為您實際需要的。 在我的例子中,我需要作為源代碼打開的文件是 Main.storyboard,我將 ViewController 的實例更改為 DetailViewController。

我從 Xcode 和 main.storyboard 中刪除了兩個文件,我認為這是我一開始就導致這個問題的原因。

在 mij 情況下,ViewController.h/m 在 lib 中。 項目仍在構建,但從 Xcode 6.3 開始,上述錯誤在運行時顯示。 將這兩個文件移回項目解決了這個問題。

我在玩春季課。 這個錯誤發生在我身上,因為我在將整個文件夾類移動到項目而不是創建組時使用文件夾作為參考。 所以這是我的解決方案,不要使用文件夾作為參考,而是創建組。

就我而言,我將應用程序設置為通用應用程序,因此 xcode 創建了兩個故事板。但我只使用(設計)了 iPhone 故事板。 並嘗試在 iPad 中運行應用程序。解決問題只需將應用程序制作為僅適用於 iPhone 並且效果很好。

當我將文件添加到“myapp”時,我在 Xcode 6.3 中遇到了同樣的問題。 那是因為我選擇了“創建文件夾引用”而不是“創建組”。我刪除了這些文件並使用“創建組”選項再次添加它們。問題已解決。

對我來說,我使用的是 Xcode7 + Swift2

通過檢查我的代碼解決了這個問題,我的視圖控制器中有這一行:

 self?.navigationController?.pushViewController(vc, animated: true)

然后我意識到我還沒有將 navigationController 連接到詳細信息頁面。 因此,如果您要推送具有自定義 ID 的新 ViewController,最好檢查一下。

我的問題與 podfile 框架(特別是“BWWalkthrough”)有關。 上述解決方案都不適合我,無論我如何嘗試,我都無法讓模塊指向我的應用程序。

最終對我有用的是將庫作為 podfile 刪除,並將其作為靜態庫直接添加到我的項目中。 在那之后,一切對我來說都是笨拙的。 不完全確定類的 pod 實現“破壞”了什么。

在我的情況下,問題是由於將我們的主故事板設置為啟動屏幕,並且對於故事板中引用的每個自定義視圖控制器,我會在應用程序啟動時收到控制台錯誤(沒有崩潰)。

我們已經涵蓋了 XIB 和啟動圖像到故事板,但我還沒有開始讓啟動屏幕再次工作。 當我終於開始創建一個沒有自定義視圖控制器(這是不允許的)的基本啟動故事板時,這些控制台錯誤停止出現。

對我來說,問題是我在情節提要中引用了一個自定義類(與 .h 文件匹配),但 .m 文件中沒有 @implementation 命令。

斯威夫特 3解決方案。

所有這些都不起作用。

  1. 單擊右窗格上的Module不起作用。
  2. 添加@obj 不起作用。
  3. 重新啟動不起作用。
  4. 當 xcode 中斷更長的路徑時移動到桌面不起作用。 ...

這終於奏效了。

只需創建新目錄並在其中創建一個新項目 添加除 Main.sotryboard 之外的文件。

現在從以前的項目中復制視圖控制器並將其粘貼到新的 Main.storyboard 中。

瞧! 這行得通。

我是PyObjC用戶,我的NSView子類在它自己的文件中。 為我解決這個問題的方法是將NSView子類從它自己的文件移動到我的AppController.py文件中。 這是包含應用程序控制器的文件。

XCode 10停止“優化調試”時,這真的很奇怪。
在我的例子中,我用 Storyboard 設置了 UITableViewDelegate 和 UITableViewDataSource 並且忘記了實現那些需要的方法。
我只是想先測試視圖,然后再實現這些方法,然后崩潰! XCode 9會對這些方法發出警告,但是XCode 10確實讓我的代碼變慢了,而不是在這個上,其他我一直在經歷這個“錯誤懷疑”。
希望這對某人有所幫助。
謝謝

對我來說,我已經嘗試了這個問題中的所有解決方案都不起作用,我終於成功了。

將 pod .h .m 文件復制到我的項目中,並將 .h 導入到我的項目 c 標頭中。

然后我回到情節提要,該類是UICountingLabel我將其刪除並按 Enter 鍵(空無類),然后我再次添加它並按 Enter 鍵,成功運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM