Iphone IAP耗材在购买一次时触发两次
“尚未解决…” 我的iap耗材包有问题。问题是,当我买一个时,它会复制购买,在没有请求的情况下制作另一个。“警报”视图也显示为双视图 奇怪的是:这种错误只发生在我为我的应用程序制作ipa时,而不是在调试它时!我不明白为什么 以下是在我的主菜单中实现的Iphone IAP耗材在购买一次时触发两次,iphone,ios,ipad,cocos2d-iphone,in-app-purchase,Iphone,Ios,Ipad,Cocos2d Iphone,In App Purchase,“尚未解决…” 我的iap耗材包有问题。问题是,当我买一个时,它会复制购买,在没有请求的情况下制作另一个。“警报”视图也显示为双视图 奇怪的是:这种错误只发生在我为我的应用程序制作ipa时,而不是在调试它时!我不明白为什么 以下是在我的主菜单中实现的productPurchase方法,我将IAP按钮放在主菜单中: - (void)productPurchased:(NSNotification *)notification { NSUserDefaults * defaults = [
productPurchase
方法,我将IAP按钮放在主菜单中:
- (void)productPurchased:(NSNotification *)notification {
NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
NSString * productIdentifier = notification.object;
NSString* plistPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"XXXXX.plist"];
if(plistPath != nil){
int playerSilverCoins = [defaults integerForKey:@"userSilverCoins"];
int playerGoldCoins = [defaults integerForKey:@"userGoldenCoins"];
NSArray *coinsItems = [NSArray arrayWithContentsOfFile:plistPath];
for (NSDictionary *coinItem in coinsItems) {
if ([[coinItem objectForKey:@"productId"] isEqualToString:productIdentifier]) {
playerSilverCoins = playerSilverCoins + [[coinItem objectForKey:@"silverCoins"] integerValue];
playerGoldCoins = playerGoldCoins + [[coinItem objectForKey:@"goldenCoins"] integerValue];
[defaults setInteger:playerSilverCoins forKey:@"userSilverCoins"];
[defaults setInteger:playerGoldCoins forKey:@"userGoldenCoins"];
[defaults synchronize];
NSLog(@"product bought: %@" , productIdentifier);
NSString *message = nil;
if([[coinItem objectForKey:@"goldenCoins"] integerValue] == 0)
message = [NSString stringWithFormat:@"You have bought %d silver coins", [[coinItem objectForKey:@"silverCoins"] integerValue]];
else
message = [NSString stringWithFormat:@"You have bought %d golden coins and %d silver coins", [[coinItem objectForKey:@"goldenCoins"] integerValue],[[coinItem objectForKey:@"silverCoins"] integerValue]];
UIAlertView * alert = [[UIAlertView alloc]initWithTitle:@"XXXXX" message:message delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
[alert show];
[alert release];
NSNumber* achievementContributor = [defaults objectForKey:@"AchievementContributor"];
if ([achievementContributor intValue] != 1 ) {
[[GameCenterAchievement sharedGameCenterAchievement] checkAchievements:_kContributor];
[defaults setObject:[NSNumber numberWithInt:1] forKey:@"AchievementContributor"];
[[GKAchievementHandler defaultHandler] notifyAchievementTitle:@"Contributor"
andMessage:@"Buy a coin pack"];
}
break;
}
}
}
}
我不知道那里是否有问题,也不知道我的IAP类在那里实现了事务、恢复等。如果有人需要更多的代码,就要求它。谢谢 确保只添加观察者
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(productPurchased:) name:IAPHelperProductPurchasedNotification object:nil];
添加侦听器乘法次数将导致多次调用回调方法。
如果您正在重用您的类-请记住在解除锁定后删除Observer-它不会自己执行此操作。可能您正在为该通知添加两个侦听器?Than函数将被调用的次数与您有侦听器的次数相同-请确保在适当的时候清理该函数。在添加侦听器时,可能会在您发出此通知的位置发布一段代码-这会有所帮助。你粘贴的那个看起来还可以。@GrzegorzKrukowski你能告诉我在哪里添加了两次通知吗?@GrzegorzKrukowski在我的Init方法中我有一个
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(productPurchased:)name:iapherperproductpurchasednotification object:nil]代码>这将是第二次调用吗?取决于init是否发生两次:)可能将NSLog放在这之前。