2011-06-08 190 views
1

我正在尝试将应用内购买添加到我的iPhone应用。但是当我运行我的应用程序或尝试购买商品我的应用程序崩溃,并显示下一个错误:应用内购买崩溃

warning: Unable to read symbols for /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.3.3 (8J2)/Symbols/Developer/usr/lib/libXcodeDebuggerSupport.dylib (file not found). (gdb)

我把StoreKit代码在NSObject类,看看代码波纹管。

StorePurchase.h

#import <Foundation/Foundation.h> 
#import <StoreKit/StoreKit.h> 

@interface StorePurchase : NSObject <SKProductsRequestDelegate, SKPaymentTransactionObserver> { 

} 

- (void)loadStore; 
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions; 
- (void)purchase; 
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response; 

@end 

StorePurchase.m

#import "StorePurchase.h" 

@implementation StorePurchase 

- (void)loadStore { 

    if ([SKPaymentQueue canMakePayments]) { 
     NSLog(@"Parental-controls are disabled"); 

     SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:@"testding2"]]; 
     request.delegate = self; 
     [request start]; 

    } 
    else { 
     NSLog(@"Parental-controls are enabled"); 
    } 

} 

- (void)purchase { 

    SKPayment *payment = [SKPayment paymentWithProductIdentifier:@"testding2"]; 
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 
    [[SKPaymentQueue defaultQueue] addPayment:payment]; 

} 

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { 

    SKProduct *validProduct = nil; 
    int count = [response.products count]; 
    if (count > 0) { 
     validProduct = [response.products objectAtIndex:0]; 
     NSLog(@"Products found, joepie!!!"); 
    } else if (!validProduct) { 
     NSLog(@"No products available"); 
    } 

} 

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { 

    for (SKPaymentTransaction *transaction in transactions) { 

     switch (transaction.transactionState) { 

      case SKPaymentTransactionStatePurchasing: 

       break; 

      case SKPaymentTransactionStatePurchased: 

       [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 

       break; 

      case SKPaymentTransactionStateRestored: 
       [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 

       break; 

      case SKPaymentTransactionStateFailed: 
       if (transaction.error.code != SKErrorPaymentCancelled) { 
        NSLog(@"An error encounterd"); 
       } 
       else { 
        NSLog(@"Cancelled!"); 
       } 

       [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 

       break; 

     } 

    } 

} 

@end 

我调用该方法 “loadStore” 是这样的:

StorePurchase *classStorePurchase = [[StorePurchase alloc] init]; 

[classStorePurchase loadStore]; 

我希望有人能帮助我这个...

回答

0

您是否添加了StoreKit框架参考?

+0

是的,在StorePurchase.h文件。当我尝试购买一个物品时,我会弹出购买它,但是当我取消并再次尝试时,它大多会崩溃... – Flappy 2011-06-08 13:14:24

+0

如果打开Objective-C异常的Break,它应显示它正在崩溃的行。 ..运行 - >在Objective-c异常中停止。让我知道什么线路崩溃.... – 2011-06-08 13:15:50

+0

它停在这里:如果([SKPaymentQueue canMakePayments]){ – Flappy 2011-06-08 13:22:14

0

可以避开一般的UIAlertView中

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 

,并把直接在你用来管理每个itens的过程

if ([SKPaymentQueue canMakePayments]) { 
    ... 
    ... 
    .. 
    [tmp show]; 
} 

之间的代码。

关注这个

- (BOOL)canMakePurchases 
{ 
return [SKPaymentQueue canMakePayments]; 
} 
    - (void)purchaseMyProduct:(SKProduct*)product{ 
if ([self canMakePurchases]) { 
    SKPayment *payment = [SKPayment paymentWithProduct:product]; 
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 
    [[SKPaymentQueue defaultQueue] addPayment:payment]; 
} 
else{ 
    UIAlertView *alertView = [[UIAlertView alloc]initWithTitle: 
    @"Purchases are disabled in your device" message:nil delegate: 
    self cancelButtonTitle:@"Ok" otherButtonTitles: nil]; 
    [alertView show]; 
} 
} 
-(IBAction)purchase:(id)sender{ 
[self purchaseMyProduct:[validProducts objectAtIndex:0]]; 
purchaseButton.enabled = NO; 
} 

问候