0

我有一个具有完整版和精简版(包括应用内购买)的应用程序,问题是当我购买应用程序时,精简版会加载所有完整的东西,但是当我关闭应用程序并再次打开它时,它不加载完整的菜单和所有的东西,包括完整版本。当我正在修改其他人所做的代码时,我不太了解如何设置一些东西(如级别、图标或购买应用程序所做的特殊事情)以不出现在精简版上,但完全可以。

我在应用程序委托中找到了这个:

-(void)setLite:(bool)value
{
    lite = value;
    [self saveUserDefaults];
}

-(void)loadUserDefaults
{
    NSUserDefaults * prefs = [NSUserDefaults standardUserDefaults];

    if(prefs)
    {
        wasExecuted = [[prefs objectForKey:@"wasExecuted"] boolValue];
        lite = [[prefs objectForKey:@"lite"] boolValue];

        if(!wasExecuted)
            lite = YES;
//        if(wasExecuted)
//            lite = NO;
    }
}

-(void)saveUserDefaults
{
    NSUserDefaults * prefs = [NSUserDefaults standardUserDefaults];

    if(prefs)
    {
        [prefs setObject:[NSNumber numberWithBool:executed] forKey:@"executed"];
        [prefs setObject:[NSNumber numberWithBool:lite] forKey:@"lite"];
    }
}

这就是它在交换机上的使用方式(例如):

case 7:
            if(appDelegate.lite)
            {                
                [self showSubInfo:@"xxxxx.png" btnClosePos:CGPointMake(0, 0)];
//                [self xxxxxlite];
            }
            else
            {
                NSLog(@"xxxx");
                storyBoardPage7 *xxxxx = [[xxxxx alloc]init];
                xxxx.modalTransitionStyle = MODAL_TRANSITION_STYLE;
                [rootViewController xxxx animated:YES];
                [xxxx release];
            }

这是 IAP 成功时触发的方法:

-(void) changeMenuToFull {
    NSLog(@"Buy complete");

    [appDelegate setLite:NO];

       [self removeLiteMenu];
       [self loadFullMenu];
}

但我不知道为什么它在关闭菜单时不保存菜单...

谢谢阅读。

4

2 回答 2

0

这就是代码的样子:

-(void)setLite:(bool)value
{
    lite = value;
    [self saveUserDefaults];
}

-(void)loadUserDefaults
{
    NSUserDefaults * prefs = [NSUserDefaults standardUserDefaults];

    if(prefs)
    {
        wasExecuted = [[prefs objectForKey:@"wasExecuted"] boolValue];
        lite = [[prefs objectForKey:@"lite"] boolValue];

        if(!wasExecuted)
            lite = YES;
//        if(wasExecuted)
//            lite = NO;
    }
}

-(void)saveUserDefaults
{
    NSUserDefaults * prefs = [NSUserDefaults standardUserDefaults];

    if(prefs)
    {
        [prefs setObject:[NSNumber numberWithBool:executed] forKey:@"wasExecuted"];
        [prefs setObject:[NSNumber numberWithBool:lite] forKey:@"lite"];
        [prefs synchronize];
    }
}

现在,如果 lite 在用户默认值中设置为 YES,则在您调用 loadUserDefaults 后它将为 YES。

于 2013-04-17T14:19:11.573 回答
0

看起来开发人员正在用户默认值中保存一个布尔值,以确定是否加载精简版或完整版。

我看到的唯一可能与此代码有关的问题wasExecuted是正在返回,NO这就是lite设置为的原因YES,因此正在加载精简版。

完成 IAP 并重新打开应用程序后,您能否检查 wasExecuted 的值是多少?

于 2013-04-16T12:08:52.933 回答