0

私のゲームでは、プレイヤーの統計をドキュメント ディレクトリに保存する plist に保存しています。「Default_Stats.plist」という名前で保存する必要がある各統計の空の辞書があるため、アプリが初めて読み込まれる場合は、それを適切なディレクトリにコピーして、自由に読み込んで上書きできるようにします。問題は、アプリがロードされるたびに、「Stats.plist」を認識せず、デフォルトの統計で上書きし、プレーヤーが作成したすべての統計をリセットすることです...そして、奇妙なことに、それは完全に機能していましたシミュレーターですが、デバイス上ではありません。これが私のコードです:

このメソッドでは、統計を読み取ります。

- (void) readStatsFromFile{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *statsPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"Stats.plist"];

    //Check if the file has already been created
    if (![[NSFileManager defaultManager] fileExistsAtPath:statsPath]){
        [self createStatsList];
    }else{
        stats = [[NSMutableDictionary dictionaryWithContentsOfFile:statsPath]retain];
    }
}

これが私の作成方法です:

- (void) createStatsList{
    NSString *statsPath = [[NSBundle mainBundle] bundlePath];
    statsPath = [statsPath stringByAppendingPathComponent:@"Default_Stats.plist"];

    stats = [[NSMutableDictionary dictionaryWithContentsOfFile:statsPath] retain];

    [self writeStatsToFile];
}

そして私の書き方

- (void) writeStatsToFile{
    BOOL ok;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *statsPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"Stats.plist"];
    ok = [stats writeToFile:statsPath atomically:YES];

    if (!ok) {
        NSLog(@"Couldn't write to file");
    }else
        NSLog(@"Stats written succesfully!");
}

助けてください、何が悪いのか本当にわかりません!私は自分自身を十分に明確にしたことを願っています!

4

4 に答える 4

0

Macに重複が存在する可能性があります。これにより、シミュレータではexists = trueになりますが、デバイスでは存在しません。

確認する最も簡単な方法は、検出されたパスをNSLogすることです。これらのツールを参照してください。デバイスで実行されているリリースビルドのコンソールログをキャプチャできます。

于 2013-01-07T18:38:51.603 に答える
0

絶対パスの代わりにファイルパスを使用してください。

于 2013-01-07T16:08:12.930 に答える