3

この問題にはすでにたくさんのスレッドがあることは知っていますが、私の問題を解決するスレッドが見つからないようです。3 つの配列を含む辞書をルートとする plist があります。plist に書き込むコードは、シミュレーターでは正常に動作しますが、デバイス上では (null) です。

  • アプリバンドルに書き込もうとしているのではなく、
  • ファイル パスは正しく、起動時にチェックして、ファイルが Documents フォルダーに存在することを確認しています (実際に存在します)。

    - (void) writeToPlist:(NSString *)fileName playerColor:(NSString *)player withData:(NSArray *)data
    {
        NSArray *sysPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory ,NSUserDomainMask, YES);
        NSString *documentsDirectory = [sysPaths objectAtIndex:0];
        NSString *filePath =  [documentsDirectory stringByAppendingPathComponent:fileName];
    
        NSLog(@"File Path: %@", filePath);
    
        NSDictionary *plistDict = [[NSDictionary alloc] initWithContentsOfFile:filePath];
    
        NSLog(@"plist: %@", [plistDict description]);
    
        [plistDict setValue:data forKey:player];
    
        BOOL didWriteToFile = [plistDict writeToFile:filePath atomically:YES];
        if (didWriteToFile) {
            NSLog(@"Write to file a SUCCESS!");
        } else {
            NSLog(@"Write to file a FAILURE!");
        }
    }
    

デバッグ出力:

    File Path: /var/mobile/Applications/CA9D8884-2E92-48A5-AA73-5252873D2571/Documents/CurrentScores.plist
    plist: (null)
    Write to file a FAILURE!

他のプロジェクトでも同じ方法を使用したことがあるので、何かを忘れているのか、それとも何の取引なのかわかりません。スペル/大文字/小文字をチェックしてplistを作り直しましたが、どちらも違いはありませんでした。

では、なぜ plistDict (null) がデバイス上にあって、シミュレーター上にないのでしょうか? plists に関する別の投稿で解決策を見逃していた場合は、お詫び申し上げます。

4

1 に答える 1