アプリ内購入アプリを実装しているアプリケーションが EDGE ネットワークに接続するとクラッシュし、ネットワークが 100% 失われ、ネットワークが非常に貧弱です。クラッシュ ログはありません。しかし、それは "EXC BAD ACCESS code=1 address=0xc "
次の行で言う
_completionHandler(YES, skProducts);
メソッドのコード
#pragma mark - SKProductsRequestDelegate
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
sharedManager=[Mymanager sharedManager];
_productsRequest = nil;
sharedManager.bookidList=[[NSMutableArray alloc]init];
sharedManager.sharedProductPrice=[[NSMutableArray alloc]init];
NSArray * skProducts = response.products;
NSLog(@"sk product %@",skProducts);
// NSMutableArray *a=[[NSMutableArray alloc]init];
for (SKProduct * skProduct in skProducts) {
[sharedManager.sharedProductPrice addObject:skProduct.price];
[sharedManager.bookidList addObject:skProduct.productIdentifier];
}
[self updatePlist];
_completionHandler(YES, skProducts); //EXC BAD ACCESS CODE =1 ADDRESS=0XC
_completionHandler = nil;
}
Ray Wenderlich のサイト (iOS6.0 用) のアプリ内購入チュートリアルに従っています。私のアプリケーションの最小ターゲットは iOS5 です。このクラッシュを修正する方法はありますか?
編集
新しい変更、私は NSArray を強力な ARC プロパティにしましたが、それでも画像の下のチェックがクラッシュします
iTunes Connect から製品情報を取得するメソッド:
- (void)requestProductsWithCompletionHandler:(RequestProductsCompletionHandler)completionHandler {
// 1
_completionHandler = [completionHandler copy];
// 2
_productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:_productIdentifiers];
_productsRequest.delegate = self;
[_productsRequest start];
}
この最初の squirrel は、インスタンス変数内の完了ハンドラー ブロックのコピーを作成するため、プロダクト リクエストが非同期的に完了したときに呼び出し元に通知できます。次に、SKProductsRequest の新しいインスタンスを作成します。これは、iTunes Connect から情報を取得するためのコードを含む Apple 作成のクラスです。使い方はとても簡単です。デリゲート (SKProductsRequestDelegate プロトコルに準拠) を指定し、start を呼び出して実行するだけです。IAPHelper クラス自体をデリゲートとして設定します。これは、製品リストが完了する (productsRequest:didReceiveResponse) または失敗する (request:didFailWithErorr) ときにコールバックを受け取ることを意味します。デリゲート コールバックといえば、次にそれらを追加します。@end の前に次のコードを追加します。