我在我的视图中调用In App购买,但是当用户按下buyButton
并且我不确定为什么会这样时它会一直崩溃。我得到的崩溃:
2014-01-25 15:57:54.625 MyApp[563:60b] *** -[__NSArrayI objectAtIndex:]: message sent to deallocated instance 0x1a027b50
这是我的代码:
{
NSMutableArray *_objects;
NSArray *_products;
NSNumberFormatter * _priceFormatter;
}
- (void)viewDidLoad
{
[super viewDidLoad];
[RageIAPHelper sharedInstance];
_products = nil;
[[RageIAPHelper sharedInstance] requestProductsWithCompletionHandler:^(BOOL success, NSArray *products) {
if (success) {
_products = products;
SKProduct * product = (SKProduct *) [_products objectAtIndex:0];
_priceFormatter = [[NSNumberFormatter alloc] init];
[_priceFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[_priceFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[_priceFormatter setLocale:product.priceLocale];
NSString *priceString = [_priceFormatter stringFromNumber:product.price];
}
([[RageIAPHelper sharedInstance] productPurchased:product.productIdentifier]);
}
}];
}
- (void)buyButtonTapped:(id)sender {
UIButton *buyAdButton = (UIButton *)sender;
SKProduct *product = [_products objectAtIndex:buyAdButton.tag];
NSLog(@"Buying %@...", product.productIdentifier);
[[RageIAPHelper sharedInstance] buyProduct:product];
}
@end
在此崩溃
SKProduct *product = [_products objectAtIndex:buyAdButton.tag];
答案 0 :(得分:2)
这条消息来自僵尸。关闭僵尸。
如果您不使用ARC,请使用它!使用ARC,可以为您正确管理内存,从而防止出现这种情况,即将消息发送到解除分配的实例。
如果您 使用ARC,那么您通过对_products
的内存管理不善来阻止它;也许您已将_products
声明为弱(不安全的未保留)参考。
此外,运行分析器。它将指出这类事情的潜力。它比人类更了解记忆管理。