目前我正在從plist加載支持的產品,然後發送SKProductsRequest以確保我的SK產品仍然可用有效。在iphone上的應用程序購買:如何在有人可以購買前獲得可用產品*
所以我設置的要求,啓動它,並得到響應:
- (無效)productsRequest:(SKProductsRequest *)要求didReceiveResponse:(SKProductsResponse *)響應
現在,到目前爲止所有功能正常。 問題:從調用請求直到收到響應,它可能會持續幾秒鐘。直到我的應用程序已經加載並且用戶可能能夠選擇併購買產品。
但由於沒有收到產品,可用產品與驗證產品不同步 - >不太可能,但可能出現錯誤。
所以我的想法是等待數據加載,只有當列表被驗證時才繼續。 (等待幾秒鐘...)。我有一個管理所有產品的單例實例。
+ (MyClass *) sharedInstance
{
if (!sharedInstance)
sharedInstance = [MyClass new];
// Now wait until we have our data
[condition lock];
while (noEntriesYet) // is yes at begin
[condition wait];
[condition unlock];
return sharedInstance;
}
- productsRequest: didReceiveResponse:
{
[condition lock];
// I have my data
noEntriesYet = false;
[condition signal];
[condition unlock];
}
問題:應用程序凍結。如果didReceiveResponse在 之前完成查詢sharedInstance,一切正常工作。有不同的線程,如果 在didReceiveResponse期間達到等待,則鎖定工作,一切正常。但是,如果不是,即使請求已發送,也不會調用didReceiveResponse 。 鎖被釋放,一切看起來都不錯。我試圖在單獨的NSThread中使用NSOperationQueue發送產品請求,但沒有成功。
- 爲什麼?發生什麼事 ?
- 如何解決問題?
由於GUI在主運行循環中工作,凍結的原因現在已知。不幸的是,我需要didReceiveResponse,並且消息在主線程上運行*,因此使用另一個線程初始化共享實例並阻止GUI直到我收到更復雜。在我的解決方案後,我沒有試圖解決這個問題 – 2010-06-17 13:55:00