2013-11-09 44 views
0

我閱讀以下答案,所以我知道「Interface Builder文件中的未知類」錯誤可以使用鏈接器選項-ObjC來解決。 (僅供參考,MyClass的是靜態庫。)如何通過一行讀取「[MyClass class]」來修復「Interface Builder文件中的未知類<MyClass>」錯誤?

https://stackoverflow.com/a/6092090/534701

我還發現,在App代表的[MyClass class]一行代碼可以處理同樣的問題,而無需使用-ObjC選項。 我的問題是代碼如何工作。

根據我上面附上的答案,錯誤發生是因爲我的靜態庫中的符號未加載。那麼,這意味着[MyClass class]使鏈接器在運行時加載符號? (這沒有意義)

回答

2

鏈接器將嘗試通過刪除未使用的符號來減少最終的二進制大小。從Storyboard實例化的類是使用反射創建的,因此鏈接器無法知道該類是否正在使用,因此它從最終的二進制文件中刪除。

通過將此行添加到您的代碼中,您正迫使鏈接器在編譯時(不是在運行時)添加該類,使Storyboard的反射調用按預期工作。

+0

謝謝。不要混淆,我已經添加了一個提示鏈接器與運行時無關的句子。 – nephilim

1

我也遇到過這個問題。接受的答案並沒有解決我的答案。這是什麼解決了我的答案,我認爲是它應該完成的實際方式:

在IB中,您可以在其中選擇您的班級,在下面的另一個下拉菜單中輸入你的班級叫做「模塊」。在這裏,您可以選擇任何內容(對於Objective-C中的類),或者您可以選擇預填模塊,通常是您的應用的名稱。如果你這樣做,運行時就會明白這個類運行在一個名爲Swift的模塊中,並且可以加載它。

這適用於僅作爲Obj-C開始的項目,並且稍後添加了一些swift類。

+0

謝謝!這正是我所需要的。應該修復IB來處理這個問題。 –

相關問題