我有这个项目名为engine.xcodeproj嵌入另一个项目myApp。Xcode和路径噩梦
该引擎必须从MainViewController.h中获取一个值,该值是应用程序类的头部,超出了engine.xcodeproj的范围。
如何让所有应用主路径对嵌入式项目可见!
我使用的Xcode 5和编译为iOS 6
我有这么回答此之前,但这些问题的答案都没有解决这种情况下...
见图片:
谢谢。
我有这个项目名为engine.xcodeproj嵌入另一个项目myApp。Xcode和路径噩梦
该引擎必须从MainViewController.h中获取一个值,该值是应用程序类的头部,超出了engine.xcodeproj的范围。
如何让所有应用主路径对嵌入式项目可见!
我使用的Xcode 5和编译为iOS 6
我有这么回答此之前,但这些问题的答案都没有解决这种情况下...
见图片:
谢谢。
呃,这就是所谓的意大利面代码。
最好在引擎项目中定义一个协议,视图控制器可以实现该协议,然后将id<Protocol>
传递给引擎。这在两个项目之间创建了一个抽象,同时在它们之间定义了强大的语言(API)。您提到您希望在多个应用中使用Engine项目 - 这是您的最佳解决方案。
发动机项目:
@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
现在,你的火箭类应该有一个属性定义,像这样:
#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
:
@property (nonatomic, weak) id<MyAPIProtocol> dataSource; //Whatever name you need, of course
在你的应用程序使用该引擎项目
现在
结果是,引擎项目是独立的,不需要知道012的实现。它只知道它有一个dataSource
属性可以满足所有需求。
现在,当你有你的引擎对象在MainViewController准备好了,你应该设置它的数据源:
self.engine.dataSource = self;
我修正了协议定义。你有没有'#import'你定义协议的地方的.h文件?你应该在'MainViewController'中导入它。 –
@橡皮桶不,不是黑魔法。你在协议中声明一个方法并在MainViewController中实现。不要忘记设置数据源:'engine.dataSource = self;'。现在,在引擎上,您只需调用'[self.dataSource objectIneed];'然后就可以执行了。 你为什么要删除你的评论? –
我在哪里设置engine.dataSource = self; ?你不要在你的答案中提及它! – SpaceDog
你倒着做。通常,Xcode项目应该能够自己构建,而不需要外部依赖。如果您的'engine'项目依赖于外部'MyApp'项目中的头文件,那么它不能自行构建。为什么你使用单独的项目? –
,因为这个想法是让这个引擎被多个应用程序使用。这是引擎必须访问主类的唯一情况。这一切都发生在用户退出使用模块并想要返回到主菜单时。 – SpaceDog