0

他の iOS アプリケーション プロジェクトで使用する静的ライブラリを作成しました。その仕組みは、アプリケーション プロジェクトが静的ライブラリにプロトコルを実装し、静的ライブラリのメソッドを呼び出すことです。次に、静的ライブラリは、呼び出し元のビューの上にビューを表示します。コードは次のとおりです。

デリゲートのメイン クラスの MyFile.h ファイル:

@protocol MyHandlerDelegate <NSObject>

     - (void)infoRetrieved:(BOOL)success;

@end

@interface MyFile : UIViewController
{
    id <MyHandlerDelegate> delegate;
}

@property (retain) id delegate;

MyFile.m には以下が含まれます。

- (void)showRewards
{
    [[[self delegate] view] addSubview:view1];
}

ここで、ボタンが 1 つだけのダミー アプリケーションを作成したところ、これは正常に機能し、静的ライブラリは呼び出しビューの上にビューを正常に表示しました。次に、これをオープン ソース ゲームの TweetJump (Cocos2D 上に構築) で機能させる必要があります。ハイスコ​​ア クラスでは、ヘッダー ファイルをインクルードし、デリゲートを実装しました。実装ファイルでは、次のコードを呼び出します。

MyFile *mf = [[MyFile alloc] init];
[mf setDelegate:self];
[mf showRewards];

ご参考までに、私は Highscore クラス - HeaderImplementationをホストしました。上記のメソッドを実行したときに発生するエラーは次のとおりです。

2013-04-16 23:54:42.658 tweejump[11502:c07] +[Highscore view]: unrecognized selector sent to class 0xecc08 2013-04-16 23:54:42.661 tweejump[11502:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[Highscore view]: unrecognized selector sent to class 0xecc08'

私はそれが退屈な質問であることを知っています. 大変助かります。ありがとう

4

2 に答える 2

1

Highscore クラスにはビュー メソッドがないことを示しています。あなたのプロトコルは、デリゲートは NSObject である必要があるだけで、それ以上具体的ではないと言っています。

于 2013-04-16T23:22:15.413 に答える
0

インスタンス メソッドではなく、クラス メソッドでこのコードを呼び出しているようです。オブジェクトはそのクラスと交換できません。クラスの代わりに、実際の Highscore オブジェクトにこれを行わせます。

于 2013-04-16T23:23:52.173 に答える