gpt4 book ai didi

ios - 应用内购买 iOS 6

转载 作者:行者123 更新时间:2023-12-01 17:59:19 25 4
gpt4 key购买 nike

我正在尝试在 iOS 6 的应用程序购买中实现,我正在关注 Ray Wenderlich iOS 6 in-app tutorial作为我的引用点。我从 Ray 的代码中做出的一个重大改变是,我有一个按钮(应用程序中只有 1 个购买),用户可以点击该按钮进行购买,而不是为其制作自定义表格 View 。我似乎无法让它工作,我一直在

-[__NSMallocBlock__ allObjects]: unrecognized selector sent to instance 0x1d5846d0
2012-10-03 00:03:25.715 myapp[752:907] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSMallocBlock__ allObjects]: unrecognized selector sent to instance 0x1d5846d0'

我相信问题发生在内部
- (void)requestProductsWithCompletionHandler:(RequestProductsCompletionHandler)completionHandler 

ray 已经实现并且我已经实现了 2 个辅助类。我为这些更改的只是应用程序 ID 号。这些类称为 IAPHelper.h/m 和 RageIAPHelper.h/m

我已经发布了我认为发生错误的代码(时间不长)。如果有人可以帮助我,我已经为此工作了大约 4 个小时。
先感谢您

内购ViewController
 -(void) viewDidLoad
{
[super viewDidLoad];
[self reload]; //Customized for my own needs compared to what Ray had
}

-(void)reload {
_products = nil;
[[RageIAPHelper sharedInstance] requestProductsWithCompletionHandler:^(BOOL success, NSArray *products) {
if (success) {
_products = products;
//[self.tableView reloadData];
}
//[self.refreshControl endRefreshing];
}];
}

内部辅助方法称为 IAPHelper.m
- (void)requestProductsWithCompletionHandler:(RequestProductsCompletionHandler)completionHandler {

// 1
_completionHandler = [completionHandler copy];
// 2
_productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:_productIdentifiers]; // This is where I think the crash is
_productsRequest.delegate = self;
[_productsRequest start];
}

最佳答案

如果出现问题

-(void)requestProdcutsWithCompletionHandler:(RequestProductsCompletionHandler)
completionHandler{
....
{

在第一次调用完成之前被调用两次。原因是因为使用了 SKProductsRequestDelegate 并在收到响应时调用了以下函数:
-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:
(SKProductsResponse *)response{
...
_completionHandler(YES, availableProducts)
_completionHandler = nil;
}

注意处理响应后 _completionHandler 是如何设置为 nil 的。好吧,当下一个响应来自对“requestProductsWithCompletionHandler”的重复调用时,_completionHandler 为 nil 并引发异常。您可以通过两种方式修复这两种方法,或者确保不多次调用该函数(不好的方式),或者放置一些逻辑以确保未使用 completionHandler:
-(void)requestProductsWithCompletionHandler:(RequestProductsCompletionHandler)completionHandler{

NSLog(@"Request Products");
if (!_completionHandler) {
NSLog(@"CompletionHandler called, new one was made");
_completionHandler = [completionHandler copy];

NSMutableSet * productIdentifiers = [NSMutableSet setWithCapacity:_products.count];
for (IAPProduct * product in _products.allValues) {
product.availableForPurchase = NO;
[productIdentifiers addObject:product.productIdentifier];
}

_productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];
_productsRequest.delegate=self;
[_productsRequest start];
}else{
NSLog(@"Duplicate call!");
}
}

productRequest 首先检查以确保 _completionHanlder 为 nil,如果不是,则忽略该请求,因为处理程序正在使用中。

关于ios - 应用内购买 iOS 6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12702909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com