【问题标题】:App crash on [[SKPaymentQueue defaultQueue] addTransactionObserver:observer];[[SKPaymentQueue defaultQueue] addTransactionObserver:observer] 上的应用程序崩溃;
【发布时间】:2013-08-01 07:48:46
【问题描述】:

这就是我在applicationDidBecomeActive 中所做的一切从崩溃中得到的结果

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

[[SKPaymentQueue defaultQueue] addTransactionObserver:observer];

但奇怪的是我过去可以购买两次,即使我删除了应用程序,我也无法摆脱这个坑。这似乎不合逻辑。我可以毫无问题地单独分配初始化观察者,并且可以毫无问题地调用默认的paymentQueue,但是如果我尝试将事务观察者添加到队列中,生命将停止。它在 ARC 上,我添加到观察者的代表不是问题。我肯定知道。

我已经为观察者的每个方法添加了一个 nslog,并且在崩溃之前没有一个被调用

找到解决方案

好的,看起来观察者没有被队列保留,因此观察者需要是一个实例变量。

谢谢

【问题讨论】:

  • 也许您应该将您的解决方案添加为答案并将其标记为解决方案,否则赏金将保持开放。

标签: iphone ios storekit


【解决方案1】:

好的,看起来观察者没有被队列保留,因此观察者需要是一个实例变量(或以某种方式保留)。

【讨论】:

  • 实例变量意味着你应该在你的对象上保留一个指针,这样它就不会被释放。您可以简单地创建一个指向观察者的属性(强)
【解决方案2】:

要为此答案添加官方来源:

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);

【讨论】:

    猜你喜欢
    • 2011-05-08
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多