full和lite应用程序的lite值

时间:2013-04-16 11:43:16

标签: iphone ios ipad in-app-purchase

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

我在app delegate中找到了这个:

-(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];
}

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

感谢阅读。

2 个答案:

答案 0 :(得分:0)

看起来dev正在保存用户默认值中的bool值,无论是加载精简版还是完整版。

我唯一看到此代码可能出错的地方是wasExecuted被返回为NO,这就是为什么lite设置为YES因此正在加载精简版。

一旦完成IAP并重新打开应用程序,您能查看wasExecuted的值吗?

答案 1 :(得分: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。