好的,那就说我有A级......
CLASS A 有一个方法会在用户进行应用内购买后立即调用。
-(void) didMakePurchase { ... }
(视图控制器)CLASS B 是当前场景的视图控制器。在B类中,我有一个创建UIAlertView的功能,基本上感谢用户购买。
-(void) createAlertViewAfterSuccessfulPurchase { ...create UIAlertView... }
目标/问题:我希望能够在B类的didMakePuchase方法中调用createAlertViewAfterSuccessfulPurchase方法。
我尝试了什么:我尝试导入A类并在A类中创建B类对象,这样我就可以调用该方法,但它不起作用(我的猜测是因为B类是视图控制器。)
答案 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
。
目前的例子是(不要让标题混淆你,不是代表们)
但如果两个班级之间存在联系,我的意思是,您的 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();
}