1

さて、私がクラスAを持っているとしましょう...

クラス Aには、ユーザーがアプリ内購入を行うとすぐに呼び出されるメソッドがあります。

-(void) didMakePurchase { ...  }

(VIEW CONTROLLER) CLASS Bは、現在のシーンのビュー コントローラーです。クラス BI の内部には、ユーザーが購入したことに基本的に感謝する UIAlertView を作成する関数があります。

-(void) createAlertViewAfterSuccessfulPurchase {  ...create UIAlertView... }

目標/問題:クラス B にある didMakePuchase メソッド内で createAlertViewAfterSuccessfulPurchase メソッドを呼び出せるようにしたいと考えています。

試したこと: クラス A をインポートして、クラス A にクラス B のオブジェクトを作成して、そのメソッドを呼び出せるようにしようとしましたが、うまくいきませんでした (クラス B がビュー コントローラーであるためだと思います)。

4

3 に答える 3

2

クラスAに投稿しNSNotification、クラスBでオブザーバーをこの通知に追加します

于 2012-06-28T14:06:17.893 に答える
1

解決策: クラス B をクラス A のデリゲートにしてから、次のようにします。

[myDelegate createAlertViewAfterSuccessfulPurchase:myParams]

デリゲートを宣言するには:

In class A:

.h

@protocol myProtocol;

@interface ClassA : UIView
{

}

@property (nonatomic, assign) id<myProtocol> delegate;

@protocol myProtocol <NSObject>

- (void)createAlertViewAfterSuccessfulPurchase;

@end

.m

self.delegate = classBInstance.

to call:

[delegate createAlertViewAfterSuccessfulPurchase]

in Class B:

.h

@interface ClassB : NSObject <myProtocol>

.m

implementation of:

-(void) createAlertViewAfterSuccessfulPurchase {  ...create UIAlertView... }
于 2012-06-28T14:07:23.810 に答える
0

このソリューションを確認してください。最も簡単な方法は、NSNotificationCenter.

現在の例はここにあります(タイトルで混乱させないでください。デリゲートに関するものではありません)。

デリゲート - 使い方は?

しかし、2つのクラス間に接続がある場合、つまり、クラス Bがクラス Aを作成します。別の方法もあります。その場合、次のようにブロックを使用することもできるからです。

あなたのClassB.mファイルで:

- (void)startPurchase {
    [classAinstance didMakePurchaseWithFinishedBlock:^{
        UIAlertView *_alertView = [[UIAlertView alloc] initWithTitle:@"Title" message:@"Message" delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
        [_alertView show];
    }];
}

ClassA.mファイルで:

-(void) didMakePurchaseWithFinishedBlock:(void (^)())finishedBlock { 
    ...

    finishedBlock();
}
于 2012-06-28T16:05:33.793 に答える