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 に答える