2011-04-18 34 views
11

雖然Xcode的4被公佈在共享工作區中意識到的項目跨項目班,我沒有找到這方面的工作,做了有關該問題的一些研究。在這裏的許多線程中討論的常見解決方案是創建一個靜態庫並將其與您的項目相關聯。的Xcode 4,界面生成器和類的靜態庫的意識

因此,我遵循了Jonah的指南(http://blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode-4/),並創建了一個靜態庫來共享UIView的常用子類和多個項目。

隨着一些試驗和錯誤的經驗和排查,我發現這個解決方案真正滿意,乾淨,但仍有一定的併發症:

(1)靜態庫是無法共享XIB文件

後我做的研究,這似乎是不可能從靜態庫項目外部訪問XIB文件,而無需將其拖動到每一個需要它們來創建引用的項目,包括他們。給定一個UIViewController子類中,應該從廈門國際銀行加載的靜態庫 - 雖然UIViewController子類是從,對靜態庫鏈接任何項目訪問,你不能叫「initWithNibName」不添加XIB文件到該項目。

我暫時解決了這個問題,只需在每個項目中創建對靜態庫的XIB文件的引用,我需要它們 - 是否有更好的解決方案?

(2)界面生成器不知道的靜態庫

類雖然我可以作爲一個對象的類我拖入廈門國際銀行在我的靜態庫中選擇的UIView的子類的一個我項目(甚至自動完成),我會在運行時出現錯誤,說「未知類[UIViewSubclassName]在Interface Builder文件」。

我在這裏找到的解決方案 - Interface Builder can't see classes in a static library - (將頭文件拖入XIB瀏覽器以使Interface Builder識別該類)顯然停止使用新的Xcode 4 - 將XIB瀏覽器合併到單窗口中 - 接口並且不響應被拖入它的頭文件。

如何讓我的XIB包含靜態庫中的對象(例如,我的項目中的UIViewController子類應包含一些我經常使用並因此包含在靜態庫中的按鈕),而不會在運行時拋出異常?

非常感謝!

PS:建設設備時,有些錯誤的發生與編譯爲沒有問題的仿真代碼,但拋出錯誤......

+3

其實,我找到了答案,問題(2):CLA僅在XIB中使用的sses不會包含在構建的產品中,因爲編譯器會主動忽略不在代碼中任何位置調用的類。代碼中任何地方的任何類方法(如[Foo類])的簡短調用都可以解決問題。 – knl 2011-04-19 00:31:36

回答

5

我也有類似的問題,並通過聲明對一類解決它我希望將課程列入課程。這迫使類從靜態庫中加載。班級中沒有定義任何實際的方法。

但是也有一些普遍不停地談論像設置連接標誌 -ObjC和-all_load響應

**更新請求代碼的一些其他的替代品。

我在名爲「Categories to force class loads」的項目中添加了一個組,並且例如強制將「SimpleAppStateManager」類包含在此項目中(在共享靜態庫中定義的)中,空」類文件:

SimpleAppStateManager + DART.h

#import <Foundation/Foundation.h> 
#import "SimpleAppStateManager.h" 

@interface SimpleAppStateManager (DART) 
@end 

SimpleAppStateManager + DART.m

#import "SimpleAppStateManager+DART.h" 

@implementation SimpleAppStateManager (DART) 
@end 
+0

我知道一點necro的評論,但你能詳細談談這個嗎?代碼示例可能? – Goz 2011-09-24 07:15:51

+0

更新了我的答案Goz。歡呼 – 2011-10-12 22:19:37

+0

謝謝:)非常有幫助:) – Goz 2011-10-13 09:27:16