从视图控制器类中的一些类调用方法

时间:2012-06-28 14:04:56

标签: iphone objective-c ios c cocoa-touch

好的,那就说我有A级......

CLASS A 有一个方法会在用户进行应用内购买后立即调用。

-(void) didMakePurchase { ...  }

(视图控制器)CLASS B 是当前场景的视图控制器。在B类中,我有一个创建UIAlertView的功能,基本上感谢用户购买。

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

目标/问题:我希望能够在B类的didMakePuchase方法中调用createAlertViewAfterSuccessfulPurchase方法。

我尝试了什么:我尝试导入A类并在A类中创建B类对象,这样我就可以调用该方法,但它不起作用(我的猜测是因为B类是视图控制器。)

3 个答案:

答案 0 :(得分:2)

在A类中发布NSNotification,在B类中添加观察者

答案 1 :(得分: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... }

答案 2 :(得分:0)

检查此解决方案,最简单的方法是使用NSNotificationCenter

目前的例子是(不要让标题混淆你,不是代表们)

Delegate - How to Use?

但如果两个班级之间存在联系,我的意思是,您的 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();
}