10

墜落の報告はあまりない

クラッシュから得られるのはこれだけですapplicationDidBecomeActive

MyStoreObserver * observer = [[MyStoreObserver alloc] initWithContext:self.managedObjectContext andDelegate:self];

[[SKPaymentQueue defaultQueue] addTransactionObserver:observer];

しかし奇妙なことに、過去に 2 回購入できたことがあり、アプリを削除してもすべてを再起動しても、この落とし穴から逃れることはできません。論理的ではないようです。オブザーバーのみを問題なく初期化でき、デフォルトの paymentQueue を問題なく呼び出すことができますが、トランザクション オブザーバーをキューに追加しようとすると、停止します。それはARC上にあり、オブザーバーに追加したデリゲートは問題ではありません。私は確かに知っています。

オブザーバーのすべてのメソッドに nslog を追加しましたが、クラッシュの前に呼び出されるメソッドはありません

解決策が見つかりました

さて、オブザーバーはキューによって保持されていないように見えるため、オブザーバーはインスタンス変数である必要があります。

ありがとう

4

2 に答える 2

10

さて、オブザーバーはキューによって保持されていないように見えるため、オブザーバーはインスタンス変数である必要があります(または何らかの方法で保持されます)。

于 2013-07-30T18:34:45.603 に答える
1

この回答に公式ソースを追加するには:

Framework Storekit のヘッダー ファイル SKPaymentQueue.h 内には、次の明確なコメントがあります。

// Observers are not retained.
// The transactions array will only be synchronized with the server while the queue has observers.
// This may require that the user authenticate.
- (void)addTransactionObserver:(id <SKPaymentTransactionObserver>)observer __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);
于 2013-07-31T23:48:46.330 に答える