1

好吧,假设我有A类...

CLASS A有一个方法,一旦用户进行应用内购买,就会调用该方法。

-(void) didMakePurchase { ...  }

(视图控制器) 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.

当前的示例在这里(不要让标题让您感到困惑,这与代表无关)

代表 - 如何使用?

但是如果两个类之间有联系,我的意思是,你的Class B创建了Class 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 回答