2013-12-17 3 views
1

InApp 구매 제품의 제품 정보로 사용자 인터페이스를 업데이트하는 데 이상한 문제가 있습니다.InApp Purchase products 사용자 인터페이스 업데이트시 요청 문제

제품 정보를 검색하는 데 다음 코드가 있습니다. 내 문제는 내 레이블을 업데이트하지 않거나 "_buyButton"을 사용할 수 있지만 NSLog를 사용할 때 올바른 값을 볼 수 있습니다. 그리고 예, 저는 IB 매장을 연결했습니다. viewDidLoad 메서드에서 인터페이스 개체를 변경/업데이트 할 수 있습니다. 실제 기기에서 앱을 실행하고 있습니다.

무엇이 누락 되었습니까?

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

    NSArray *products = response.products; 

    if (products.count != 0) 
    { 
     _product = products[0]; 
     _buyButton.enabled = YES; 
     _productTitle.text = _product.localizedTitle; 
     _productDescription.text = _product.localizedDescription; 
     NSLog(@"productsRequest %@", _product.localizedTitle); 
    } else { 
     _productTitle.text = @"Product not found"; 
    } 

    products = response.invalidProductIdentifiers; 

    for (SKProduct *product in products) 
    { 
     NSLog(@"Product not found: %@", product); 
    } 

} 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

나는 "구매 행동"을 수행 할 수 없다는 것을 깨달았습니다.

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid product identifier: (null)' 
+0

분명히 할 수 있습니다 :'productsRequest : '을 디버그 출력에 얻을 수 있습니까? –

+0

네,보아야 할 것이 보입니다.하지만 위의 몇 줄은이 값을 UILabel로 설정할 수 없습니다. – Jan

+0

은 [user3104325] (http://stackoverflow.com/users/3104325/user3104325)와 같은 사람입니까? 이것은 이전에 질문 한 것과 매우 유사한 질문입니다. –

답변

1

jaydee3 덕분에 문제가 발견되었지만 좋은 해결책은 아닙니다. 문제는 뷰 콘트롤러가 준비되기 전에 제품 정보가 검색된다는 것입니다.

viewDidLoad 메서드에서 "productsRequest :"를 호출하여이 문제를 해결했습니다.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
    purchasedApp = [userDefaults boolForKey:@"PurchasedKEY"]; 


    [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 

    _productID = @"YourIDHere"; 
    if ([SKPaymentQueue canMakePayments]) 
    { 
     SKProductsRequest *request = [[SKProductsRequest alloc] 
             initWithProductIdentifiers: 
             [NSSet setWithObject:_productID]]; 
     request.delegate = self; 

     [request start]; 
    } 
    else 
     _productDescription.text = NSLocalizedString(@"EnableInAppKEY", @""); 

    if (!purchasedApp) { 
     _buyButton.enabled = YES; 
    } 
    _productTitle.text = _product.localizedTitle; 
    _productDescription.text = _product.localizedDescription; 
    NSLog(@"productsRequest %@", _product.localizedTitle); 

} 
+0

같은 정확한 문제가 있기 때문에 더 많은 코드로 솔루션을 업데이트 할 수 있습니다. – Realinstomp

+0

안녕하세요. 저와 똑같은 문제입니다. 귀하의 답변을 구현하려고합니다. 'PurchasedKEY' 키와 연결된 것이 무엇인지 자세히 설명해 주시겠습니까? – GoldXApp

0

당신이 _buyButton 또는 _productTitle의 값을 확인 했 :

- (IBAction)buyProduct:(id)sender { 
    SKPayment *payment = [SKPayment paymentWithProduct:_product]; 
    [[SKPaymentQueue defaultQueue] addPayment:payment]; 
} 

그것은 다음과 같은 오류를 반환? 뷰가 아직로드되지 않았기 때문에 대리자가 호출 될 때 그들은 여전히 ​​nil입니다. 나 맞아?

언제 제품을로드하기 시작 했습니까? 가장 쉬운 해결책 : viewDidLoad:의 제품을로드하여 이전에보기가로드되었는지 확인하십시오.

+0

그냥 확인, viewDidLoad productsRequest 전에 호출 된 가져옵니다. NSLog (@ "productsRequest % @", _product.localizedTitle)를 추가했습니다. viewDidLoad 수 있지만 (null) 반환합니다. – Jan

+0

위임 메서드에 중단 점을 넣고 여기에서'_buyButton' 등의 값을 확인하십시오. '_product'가'viewDidLoad'에서 nil이면, 델리게이트는 전에 호출되지 않았습니다. 문제가 다른 곳보다 큽니다. 콘센트를 보여주고 viewController를 할당/초기화하는 방법을 보여줍니다. – calimarkus

+0

내 질문이 업데이트되었습니다. 값은 0이 아니며 "구매 행동"을 수행 할 수도 없습니다. 올바른지 이해하면 viewcontroller가 인터페이스 업데이트를 처리 할 준비가되기 전에 제품 정보가 검색됩니다. – Jan