当我在applicationDidBecomeActive
MyStoreObserver * observer = [[MyStoreObserver alloc] initWithContext:self.managedObjectContext andDelegate:self];
[[SKPaymentQueue defaultQueue] addTransactionObserver:observer];
但奇怪的是,我过去已经能够购买两次了,即使我删除了应用程序重新恢复的一切,我也无法逃脱这个坑。这似乎不合逻辑。我可以毫无问题地单独为init分配观察者,我可以毫无问题地调用默认的paymentQueue但是如果我尝试将事务观察者添加到队列中,则生命停止。它在ARC上,我添加给观察者的代表不是问题。我肯定知道。
我已经为观察者中的每个方法添加了一个nslog,并且在崩溃之前没有被调用
解决方案
好吧,看起来观察者没有被队列保留,因此观察者需要成为一个实例变量。
由于
答案 0 :(得分:10)
好吧,好像看起来观察者没有被队列保留,因此观察者需要是一个实例变量(或以某种方式保留)。
答案 1 :(得分: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);