0

我在另一个项目 myApp 中嵌入了这个名为 engine.xcodeproj 的项目。

该引擎必须从 MainViewController.h 中获取一个值,该值是应用程序类的标头,超出了 engine.xcodeproj 的范围。

如何使所有应用程序主路径对嵌入式项目可见!

我正在使用 Xcode 5 并为 iOS 6 编译。

我之前已经在 SO 上回答过这个问题,但是这些问题的答案并不能解决这个问题......

见图片:

在此处输入图像描述

谢谢。

4

1 回答 1

4

嗯,这就是所谓的意大利面条代码。

最好在 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;

于 2013-10-19T23:19:22.897 回答