我在另一个项目 myApp 中嵌入了这个名为 engine.xcodeproj 的项目。
该引擎必须从 MainViewController.h 中获取一个值,该值是应用程序类的标头,超出了 engine.xcodeproj 的范围。
如何使所有应用程序主路径对嵌入式项目可见!
我正在使用 Xcode 5 并为 iOS 6 编译。
我之前已经在 SO 上回答过这个问题,但是这些问题的答案并不能解决这个问题......
见图片:
谢谢。
嗯,这就是所谓的意大利面条代码。
最好在 Engine 项目中定义一个协议,您的视图控制器可以实现该协议,然后将其传递id<Protocol>
给引擎。这在两个项目之间创建了一个抽象,同时在它们之间定义了一种强语言 (API)。您提到您希望在多个应用程序中使用引擎项目 - 这是您的最佳解决方案。
在引擎项目中:
@protocol MyAPIProtocol
@required
//Define here the actions you want to perform/get from the data source.
- (CGFloat)floatValue;
- (UITextView*)textView;
- (void)displayAlertWithMessage:(NSString*)message;
@end
现在,您的 Rocket 类应该具有如下定义的属性:
@property (nonatomic, weak) id<MyAPIProtocol> dataSource; //Whatever name you need, of course
现在在您使用此引擎项目的应用程序中:
#import "MyAPIProtocol.h"
@interface MainViewController () <MyAPIProtocol>
@end
@implementation MainViewController
...
//Implement the protocol
- (CGFloat)floatValue
{
return 123.0f;
}
- (UITextView*)textView
{
return self.textView;
}
- (void)displayAlertWithMessage:(NSString*)message
{
//...
}
@end
结果是 Engine 项目是自包含的,不需要知道MainViewController
. 它只知道它有一个dataSource
属性可以满足它的所有需求。
现在,当您在 MainViewController 中准备好 Engine 对象时,您应该通过以下方式设置其数据源:
self.engine.dataSource = self;