2012-03-29 14 views
4

問題があります。 SKProductsRequestデリゲートメソッドが呼び出されることはありません。これは以前に尋ねられましたが、答えはありませんでした。 StoreKit delegate functions are not getting calledStoreKitデリゲートメソッドが呼び出されない

私は英語のネイティブスピーカーではないよ、私は時々面白い聞こえるかもしれない:P :(

私はiOSアプリでStoreKitを実装するには、私はすべてのStoreKitの通信を処理するクラスを作った。これはあります。コード:私は私のAPPDで[店舗requestProducts]実行したときに

@implementation VRStoreController 
- (void) requestProducts 
{ 
    SKProductsRequest *request= [[SKProductsRequest alloc] 
           initWithProductIdentifiers: 
           [NSSet setWithObject: @"myProductID"]]; 
    request.delegate = self; 
    [request start]; 
    [[UIApplication sharedApplication]setNetworkActivityIndicatorVisible:YES]; 

} 

- (void) productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response 
{ 
    NSLog(@"F7U12"); 
    [[UIApplication sharedApplication]setNetworkActivityIndicatorVisible:NO]; 
    NSArray *myProducts = response.products; 
    NSLog(@"%@", myProducts); 

} 

は私が

@interface VRAppDelegate 
@property (strong, nonatomic) VRStoreController *store; 
@end 

不思議な私のアプリデリゲートでインスタンスを作成し、このコードは、[OK]を動作しますidFinishLaunching:メソッド。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    //app initialization... 

    self.store = [[VRStoreController alloc]init]; 
    [store requestProducts]; //This works ok, delegate method gets called. 
    return YES; 
} 

しかし、私は設定のtableViewのコードを実行します。didSelectRowAtIndexPath:デリゲートメソッドと呼ばれることは決してありませんが。

//VRAppDelegate.m 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    //app initialization... 
    self.store = [[VRStoreController alloc]init];//initialize store 
    return YES; 
} 

//VRSettingsViewController.m 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    switch (indexPath.section) { 
     //case 0, 1... 
     case 2: 
     { 
      VRStoreController *store = ((VRAppDelegate *)[UIApplication sharedApplication].delegate).store; 
      [store requestProducts]; //calls SKProductRequest start, but never calls delegate method. 
      NSLog(@"GO PRO"); 
     } 
     default: 
      break; 
    } 
} 

私は何が悪いのか分かりません。ほとんどすべてを試してもエラーはなく、クラッシュはありませんが、デリゲートは決して呼び出されません。どんな助けでも大歓迎です。

ありがとうございます!

SKProductsRequestDelegate

答えて

16

私は最終的に私が持っていた問題を発見しました。 私はSKProductRequestを保持していなかったので、リクエストが開始されてからダンプされました。 問題は、私はすでにstartメソッドを呼び出し、そのデリゲートを設定しているとして、それが何をすべき、私は要求を保持する必要がshould'tと思い、固定されているが、私はこの

//VRStoreController.m 

@interface VRStoreController() 
@property (strong, nonatomic) SKProductRequest *request; //Store the request as a property 
@end 

@implementation VRStoreController 
@synthesize request; 

- (void) requestProducts 
{ 
    self.request = [[SKProductsRequest alloc] //save the request in the property 
          initWithProductIdentifiers: 
          [NSSet setWithObject: @"myProductID"]]; 
    self.request.delegate = self; 
    [self.request start]; 
    [[UIApplication sharedApplication]setNetworkActivityIndicatorVisible:YES]; 
} 

を行うことによってそれを修正他のすべてはそれ自身で行い、応答(またはエラー)を受け取ってからそれ自身を解放するまでそれ自身を保持する必要があります。

+0

修正のおめでとう!あなたができるときは、あなたの問題が解決され、あなたの解決策から学ぶことができるように他の人に気づくように、あなたの答えを「受け入れ」とマークしてください。乾杯〜 –

+1

私は同意する必要はありません、より多くの不要なコード行を保持する必要はありません。 – spybart

+0

最後に動作します。それは私のinAppクラス(別のクラスで呼び出される)を合成する上記の技術を追加した後に動作していませんでした。すべての作品は、もはやクラッシュと代議員が呼び出す:) – Muzammil

18

プロトコルは、次のメソッドを有するSKRequestDelegateプロトコルに準拠:

- (void)request:(SKRequest *)request didFailWithError:(NSError *)error; 
- (void)requestDidFinish:(SKRequest *)request; 

はそれらを実装し、それらのいずれかが呼び出されているかどうかを調べます。あなたはおそらくエラーや予期しない応答を得ているでしょう。

+2

これらはどちらも呼び出されていません – BoteRock

+0

これは私に感謝しました。 –

関連する問題