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