2011-01-06 124 views
1

遇到特定於iOS 4.0的SKProductsRequest的問題。有問題的代碼:調用[SKProductsRequest start]在iOS 4.0上掛起

- (void)requestProductData 
{ 
    NSSet *productIdentifiers = [NSSet setWithObjects:kLimitedDaysUpgradeProductId, kUnlimitedUpgradeProductId, nil]; 

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

    self.productsRequest.delegate = self; 

    [self.productsRequest start]; 
} 

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response 
{ 
    NSLog(@"didReceiveResponse"); 
} 

當[SKProductsRequest開始]被調用時,該productsRequest:didReceiveResponse:委託方法永遠不會調用;此外,整個應用程序掛起,並完全沒有響應輸入。很明顯,這對我們的iOS 4.0用戶來說是一個巨大的問題,因爲它不僅打破了付款,而且使應用程序完全無法使用。

一些其他的事情要注意:這隻發生在iOS 4.0; iOS 4.2,3.x都很好。另外:如果委託沒有在SKProductsRequest上設置(即註釋掉「self.productsRequest.delegate = self」這一行),該應用程序不會掛起(但當然在這種情況下,我們無法獲得產品信息)。此外,問題仍然重現了產品請求中的所有內容:didReceiveResponse:回調(該方法從未真正被調用)。最後,如果productIdentifiers NSSet對象初始化爲空集,則掛起不會發生。

有沒有人經歷過這個?對這裏可能發生的事情有任何想法/想法,以及我們如何能夠解決這個問題?

+0

注意:事實證明,這是我們實現的類別的一個問題,它會覆蓋NSString方法,並導致它在由低級別應用內SDK調用時在無限循環中運行。所以,SDK沒有一個通用的問題。獲得的教訓:不要覆蓋核心可可方法! – figelwump 2011-02-22 19:45:44

回答

0

你有沒有嘗試在你的委託中實現-request:didFailWithError:並且看看是否被調用?

+0

是的,我正在實施-request:didFailWithError:以及;它沒有被調用。 – figelwump 2011-01-07 05:32:41

0

我今天遇到類似的問題。我做了一個SKProductRequest後,沒有對任何委託方法做出響應。

一切工作正常,我沒有做任何修改的IAP代碼,但它打破了。

終於發現問題了。如果您自行拒絕該應用,則您製作的產品ID將失效。我們通過重新提交應用並創建新ID來解決這個問題。之後所有事情都再次開始工作。