簡體   English   中英

Interface Builder 文件中的未知 Class ****

[英]Unknown Class **** in Interface Builder file

我使用MyView的根 class 添加了 UIView xib 文件。

我在錯誤的地方創建了它,所以把它移到了項目中。 同一個項目只是一個不同的文件夾/組。

然后我在運行時遇到問題說...

Unknown Class MyView in Interface Builder file

我不知道出了什么問題,所以我現在已經從項目和目錄中刪除了文件。

我已經使用 SublimeText2 搜索了字符串“MyView”,它在項目中的任何地方都不存在。

我已經重置了模擬器,清理了項目和構建文件夾並刪除了派生數據。

仍然得到同樣的錯誤。

任何想法我現在可以做什么?

有時 IBuilder 會漏掉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">

就我而言,我通過檢查身份檢查器中的“從目標繼承模塊”選項來解決。 在此處輸入圖片說明

轉到查看 -> 實用程序轉到 .m 文件的文件檢查器

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

如果您的 Xcode 項目中有多個目標,請確保為您正在測試的目標編譯錯誤文件中提到的類。

appcode 非常固執地將舊的 xib 緩存在某處,如果您有緩存的 xib 並且它與您的控制器具有相同的名稱,它將嘗試在啟動時加載它。

刪除 .xib 后我會做什么:

  1. 從設備中刪除應用程序
  2. 清理應用程序代碼中的構建文件夾
  3. 使緩存無效並重新啟動,在它啟動之前殺死 appcode
  4. 刪除 xcode 中的派生數據
  5. 啟動應用程序代碼

第 4 步不應該是必要的,但我的感覺是沒有它我仍然看到被刪除的 .xib

當我重命名自定義視圖類時,這發生在我身上,並且模塊(在選擇視圖時在身份檢查器中)是空白的。 它保持空白,因為 Xcode 沒有自動完成自定義類名,因此它將模塊留空。 我所要做的就是在構建后重新輸入類名,然后它會自動完成,並選擇到適當的模塊(當前 - 目標)

在此處輸入圖片說明

好的,所以我刪除了對導致問題的類的所有引用,但仍然沒有。

但是,我還有一個名為MyViewController的 UIViewController 子類。 這沒有被加載到任何 IB 文件中,所以我不知道它是如何導致問題的。

我將名稱更改為MyOtherViewController

構建 - 運行 - 有效。

我不知道如何或為什么,但它現在有效。

當我在一個文件中有多個類聲明時,我遇到了同樣的問題。 我所做的是在我的一個視圖控制器中聲明了一個 UITableViewCell 子類,而忘記將 UITableViewCell 子類'@implementation 放在視圖控制器的 .m 文件中。

根據我的經驗,上述所有解決方案都沒有奏效。 然后我不得不在所有流浪的 Xib 中重新輸入自定義類。 作為一個驚人的結果,它剛剛成功,我所做的重新連接了@interface 和 IB 之間丟失的連接。 希望有用。

我在使用來自 SPM 數據包的自定義類時遇到了這個問題。 將自定義類模塊設置為 SPM 數據包名稱為我解決了這個問題。

在此處輸入圖片說明

在我的情況下,class 實現被包含在#ifdef中,但#ifdef條件有錯字,所以 class 確實丟失了

當視圖控制器 class 不是同一目標的一部分時,我遇到了同樣的問題,請檢查該視圖控制器的目標選項,清理,構建並運行項目

在此處輸入圖像描述

暫無
暫無

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

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