Ios7 SKReceiptRequest未调用(符合的NSBundle)SKRequestDelegate

Ios7 SKReceiptRequest未调用(符合的NSBundle)SKRequestDelegate,ios7,in-app-purchase,objective-c-category,receipt,Ios7,In App Purchase,Objective C Category,Receipt,我目前正在按照苹果的收据验证编程指南实施本地收据验证。我在NSBundle上定义了一个类别,该类别符合SKRequestDelegate,并提供了一种收据验证方法,在初始化应用程序委托并将其传递给UIApplicationMain()之前,我从main()内部调用该方法。这就是文件中所说的: 在应用程序启动后立即执行收据验证, 在显示任何用户界面或生成任何子进程之前。 在主功能中执行此检查,然后 调用NSApplicationMain函数 当在self.appStoreReceiptURL没有收

我目前正在按照苹果的收据验证编程指南实施本地收据验证。我在
NSBundle
上定义了一个类别,该类别符合
SKRequestDelegate
,并提供了一种收据验证方法,在初始化应用程序委托并将其传递给
UIApplicationMain()
之前,我从
main()
内部调用该方法。这就是文件中所说的:

在应用程序启动后立即执行收据验证, 在显示任何用户界面或生成任何子进程之前。 在主功能中执行此检查,然后 调用NSApplicationMain函数

当在
self.appStoreReceiptURL
没有收据时,我的收据验证方法准备一个
SKReceiptRequest
,其属性如下,并将自身设置为委托。因为它符合
SQRequestDelegate
的要求,所以它同时实现了
requestdidfish:
request:didfailwitheror:

NSDictionary *properties = [NSDictionary dictionaryWithObjectsAndKeys:
                            @NO, SKReceiptPropertyIsExpired,
                            @NO, SKReceiptPropertyIsRevoked,
                            @NO, SKReceiptPropertyIsVolumePurchase,
                            nil];

奇怪的是,当应用程序在Xcode调试器中运行时,类别启动请求后,这两个方法都没有被调用。怎么解释呢?我如何在开发过程中接收(刷新)收据,最好是使用
NSBundle
上的类别?在应用程序委托出现之前发送请求是否为时尚早(尽管引用的文档表明了这一点)?是否有任何可供我参考的工作示例代码?

似乎有几个原因导致此失败,类别的使用(此时)就是其中之一。如果我进行以下更改,我将收到对
requestdidfish:
的回调,并且可以取得进展:

  • 在物理设备(而不是模拟器)上的调试器中启动应用程序。StoreKit(和应用内钱包)将无法在模拟器中工作。这在中有记录。)

  • 让类别(而不是类别本身)的对象符合
    SKRequestDelegate
    。(我想了解为什么这是一个明显的要求,但目前没有。)

  • 在整个请求期间,
    SKReceiptRefreshRequest
    及其
    SKRequestDelegate
    。保留其中一个而不保留另一个显然是不够的。(请注意,
    SKRequest
    没有维护到的
    strong
    链接。)