-2

重複の可能性:
Plist に書き込めません

この問題があります。「instellingen」という名前の plist ファイルがあります。ファイルには、さまざまな設定が保存されます。たとえば、起動時にゲームのルールを表示します。これはシミュレーターでは問題なく動作しますが、iPad でテストしたところ、plist データが保存されませんでした。

ここに私のコードがあります:

- (void)viewDidLoad
{
    [super viewDidLoad];

    plistPath = [[NSBundle mainBundle] pathForResource:@"instellingen" ofType:@"plist"];
    instellingen = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath];

    if ([[instellingen objectForKey:@"regelAtRuntime"] boolValue] == TRUE) {
        [self.showRulesButton setTitle:@"Spelregels niet meer tonen" forState:UIControlStateNormal];
    }else{
        [self.showRulesButton setTitle:@"Spelregels wel tonen" forState:UIControlStateNormal];
    }

    [self.mainContent flashScrollIndicators];

}

- (IBAction)dismissRules:(id)sender {
    [self dismissViewControllerAnimated:YES completion:nil];
}

- (IBAction)dontShowRegels:(id)sender {

    if ([[instellingen objectForKey:@"regelAtRuntime"] boolValue] == TRUE) {
        [instellingen setValue:@"0" forKey:@"regelAtRuntime"];
    }else{
        [instellingen setValue:@"1" forKey:@"regelAtRuntime"];
    }

    [instellingen writeToFile:plistPath atomically:YES];
}

厳しい VC からルールを読み取ることは、次のコードでうまくいくようです。

NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"instellingen" ofType:@"plist"];
    instellingen = [NSDictionary dictionaryWithContentsOfFile:plistPath];

    if ([[instellingen objectForKey:@"regelAtRuntime"] boolValue] == TRUE) {
        NSLog(@"We're in!");
        [self performSegueWithIdentifier:@"showRulesSegue" sender:self];
    }

誰かが私が間違っていることを知っていますか? クリーン ビルド (Product Clean) を実行してみました。

どんな助けも大きな意味があります!

4

1 に答える 1

1

アプリ バンドルはシミュレーターでは読み書き可能ですが、デバイスでは読み取り専用です。アプリを最初に起動したときに、plist を Documents ディレクトリ (バックアップが必要な場合) または Library/Caches (バックアップが必要な場合) にコピーしてから、そのバージョンをアプリで使用する必要があります。

于 2012-12-11T20:57:58.433 に答える