这是它崩溃的功能。确切的代码行是:removeObjectForKey。即使测试函数完全为空,它也会在 removeObjectForKey 上崩溃。注意:我只是传入一个空函数回调。目前,我关闭了 ARC,我需要打开它吗?如果可能的话,我想关闭 ARC,因为打开它意味着要处理很多编译问题。
该函数确实说明了非保留对象,因此可能是内存问题。
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
// So we got some receipt data. Now does it all check out?
BOOL isOk = [self doesTransactionInfoMatchReceipt:responseString];
VerifyCompletionHandler completionHandler = _completionHandlers[[NSValue valueWithNonretainedObject:connection]];
[_completionHandlers removeObjectForKey:[NSValue valueWithNonretainedObject:connection]];
if (isOk)
{
//Validation suceeded. Unlock content here.
NSLog(@"Validation successful");
completionHandler(TRUE);
} else {
NSLog(@"Validation failed");
completionHandler(FALSE);
}
}
这是verificationController的用法:
[[VerificationController sharedInstance] verifyPurchase:transaction completionHandler:^(BOOL success) {
if (success) {
NSLog(@"Hi, its success.");
[self testMethod];
} else {
NSLog(@"payment not authorized.");
}
}];
}
- (void) testMethod {
}
我可以使用 __weak 但我必须打开 ARC,我试图避免这种情况。注意:当我将 verificaitionController 放在其他类/对象中时它可以工作,但是一旦我将它放在 InAppPurchaseManager 中,它就会在尝试访问 self 时爆炸。Self 指向 InAppPurchaseManager 的一个实例,定义如下(它是一个 phonegap 插件):
@interface InAppPurchaseManager : CDVPlugin <SKPaymentTransactionObserver> {
}