2

さて、私はこれを数日間いじっていましたが、これがうまくいかなかったので、助けを求めています! 基本的に、IAP が完了したら機能を「ロック解除」したいと考えています。IAP コードが動作するようになりましたが、ボタン「sendMail」(Interface Builder では「無効」) を変更して、ユーザーが操作できるようにしたいと考えています。

//InputViewController.h
#import "IAPStore.h"
@interface InputViewController : UIViewController <MFMailComposeViewControllerDelegate, UIAlertViewDelegate>
@property(strong,nonatomic)IBOutlet UIButton *sendMail;
-(void)enableMail;
....
@end

//InputViewController.m
#import "InputViewController.h"
#import "IAPStore.h"
-(void)enableMail
{
  [_sendMail setEnabled:YES];
  NSLog(@"Unlocking Button");
}

//IAPStore.h
#import "InputViewController.h"
@interface IAPHelper : NSObject <UIAlertViewDelegate>
-(void)purchaseComplete;
...
@end

//IAPStore.m
#import "InputViewController.h"
-(void)purchaseComplete
{
   UIAlertView *purchased = [[UIAlertView alloc]initWithTitle:@"In-App Purchase"   message:@"Purchase complete! Thank you!" delegate:nil
   cancelButtonTitle:@"OK" otherButtonTitles:nil];
   GROWInputViewController *viewController = [[GROWInputViewController alloc] init];
   [viewController enableMail];
   [purchased show];
   NSLog(@"button enabled");
}

したがって、ログも出力されますが、他のView Controllerでは何も変更されていませんが、何も変更されていません。

4

1 に答える 1

3

あなたが使用することができますNSNotificationCenter

InputViewController.mのviewDidLoad:メソッドに、次のコード行を追加します。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(enableMail) name:@"purchaseCompleteNotification" object:nil];

purchaseCompleteIAPStore.mのメソッドでは、これを置き換えます。

GROWInputViewController *viewController = [[GROWInputViewController alloc] init];
[viewController enableMail];

これとともに:

[[NSNotificationCenter defaultCenter] postNotificationName:@"purchaseCompleteNotification" object:nil];

これにより、購入が完了すると通知が投稿されます。一方、InputViewController通知が投稿されたときに「enableMail」メソッドを呼び出すように設定された「オブザーバー」があります。

また、このメソッドを InputViewController.m に追加して、割り当てが解除されたときにオブザーバーとして削除されるようにします。

-(void)dealloc{
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"purchaseCompleteNotification" object:nil];
}
于 2013-08-14T18:06:16.527 に答える