0

別のプロジェクト myApp 内に埋め込まれた engine.xcodeproj というプロジェクトがあります。

このエンジンは、engine.xcodeproj のスコープ外で、アプリケーションのクラスのヘッダーである MainViewController.h から値を取得する必要があります。

すべてのアプリのメイン パスを埋め込みプロジェクトに表示するにはどうすればよいですか?

Xcode 5 を使用し、iOS 6 用にコンパイルしています。

SOで以前にこれに答えましたが、それらの質問への答えはこのケースを解決していません...

写真を参照してください:

ここに画像の説明を入力

ありがとう。

4

1 に答える 1

4

うーん、これはスパゲッティコードと呼ばれるものです。

View Controller が実装できるエンジン プロジェクトでプロトコルを定義してid<Protocol>から、 をエンジンに渡す方がよいでしょう。これにより、2 つのプロジェクト間に強力な言語 (API) を定義しながら、2 つのプロジェクト間に抽象化が作成されます。エンジン プロジェクトを複数のアプリで使用したいとおっしゃいましたが、これが最善の解決策です。

エンジン プロジェクト:

@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

その結果、エンジン プロジェクトは自己完結型であり、 の実装を知る必要はありませんMainViewControllerdataSourceすべてのニーズを満たすことができるプロパティがあることを知っているだけです。

MainViewController でエンジン オブジェクトの準備ができたら、次のようにデータ ソースを設定する必要があります。

self.engine.dataSource = self;

于 2013-10-19T23:19:22.897 に答える