2012-03-19 15 views
3

私はSKProductsRequestを設定しようとしていますが、私は引き続きエラーEXC_BAD_ACCESSを受け取ります。私はそれがARCと関係があることを知っています。 私の.hファイルに、SKProductsRequestDelegateがあります。ARCを使用していても、SKProductsRequestの割り当てが解除されましたか?

これらは、私の.mファイルでの主な機能している:私は、これは私が得るものである、NSZombieEnabledを有効にすると

- (void)requestProUpgradeProductData { 
    NSSet *productIdentifiers = [NSSet setWithObject:kInAppPurchaseProUpgradeProductId]; 
    productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers]; 
    productsRequest.delegate = self; 
    [productsRequest start]; 
} 

#pragma mark - 
#pragma mark SKProductsRequestDelegate methods 

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { 
    NSArray *products = response.products; 
    //proUpgradeProduct = [products count] == 1 ? [products firstObject] : nil; 
    proUpgradeProduct = [products objectAtIndex:0]; 
    if (proUpgradeProduct) { 
     NSLog(@"Product title: %@" , proUpgradeProduct.localizedTitle); 
     NSLog(@"Product description: %@" , proUpgradeProduct.localizedDescription); 
     NSLog(@"Product price: %@" , proUpgradeProduct.price); 
     NSLog(@"Product id: %@" , proUpgradeProduct.productIdentifier); 
    } 

    for (NSString *invalidProductId in response.invalidProductIdentifiers) { 
     NSLog(@"Invalid product id: %@" , invalidProductId); 
    } 

    // finally release the reqest we alloc/init’ed in requestProUpgradeProductData 
    productsRequest = nil; 

    [self purchaseProUpgrade]; 

    [[NSNotificationCenter defaultCenter] postNotificationName:kInAppPurchaseManagerProductsFetchedNotification object:self userInfo:nil]; 
} 

"-[InAppPurchaseManager respondsToSelector:]: message sent to deallocated instance."

任意の助けいただければ幸いです。 ありがとう!

+0

どこにアクセスできないのですか? (例外でスローされるように設定されたブレークポイントでデバッガを使用すると、これを知ることができます) – Pochi

+0

[productsRequest start]が呼び出された直後に不正アクセスが発生します。 – Noam

答えて

4

私はそれをついに見つけました!キーはあなたが変数を合成する際に、このようにそれを行うようにしてくださいです:確認して、.mファイルで

@property (nonatomic, strong) SKProductsRequest *productsRequest; 

@synthesize productsRequest = _productsRequest; 

そして.Hで、それは次のようになります。 「自己」を使う商品を使用している場合リクエスト:

self.productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers]; 
self.productsRequest.delegate = self; 
[self.productsRequest start]; 

あなたが行く!

+0

self.productsRequest = nil; (無効)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {in: –

1

productsRequestあなたは__strong IVARに割り当てることによってproductsRequestの「保持」またはセット、辞書または配列でそれをものを強制する必要が直ちに[productsRequest start]

後に破壊されています。

+0

はい、それは私が探しているものです。しかし、そのコードは何ですか?私は過去2時間、無駄にしようとしています。 – Noam

+0

"@property(strong)SKProductsRequest * _productsRequest;"私の.hファイルに入れても、同じエラーが発生します。 – Noam

関連する問題