web-dev-qa-db-ja.com

iPhoneでプログラムでPLISTファイルを作成する方法

私はObjectiveCのプログラムでアプリケーションのDocumentsフォルダーにplistファイルを作成しようとしていました。documentsディレクトリにフォルダーを作成しました。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectoryPath = [paths objectAtIndex:0];
NSString *path = [NSString stringWithFormat:@"%@/Data.plist", documentsDirectoryPath];

XMLファイルのように見えるplistファイルを作成しようとしています。/****必要なXMLファイル**** /

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
    <key>height</key>
    <integer>4007</integer>
    <key>name</key>
    <string>map</string>
    <key>width</key>
    <integer>6008</integer>
</dict>
</array>
</plist>

/ ****コードでファイルを取得**** /

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"  "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>height</key>
    <string>4007</string>
    <key>name</key>
    <string>map</string>
    <key>width</key>
    <string>6008</string>
</dict>
</plist>

必要なファイルには配列が必要であり、配列内に辞書オブジェクトがあります。どうすればこれを変更できますか?パスにファイルを書き込む方法も知っていますが、主要な問題は、plistファイルを作成してそれを読み取る方法です。

15
lifemoveson

「プロパティリスト」ファイルとも呼ばれるPLISTファイルは、XML形式を使用して、配列、辞書、文字列などのオブジェクトを格納します。

このコードを使用して、値を作成、追加し、plistファイルから値を取得できます。

//Get the documents directory path
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"plist.plist"];
NSFileManager *fileManager = [NSFileManager defaultManager];

if (![fileManager fileExistsAtPath: path]) {

    path = [documentsDirectory stringByAppendingPathComponent: [NSString stringWithFormat:@"plist.plist"] ];
}

NSMutableDictionary *data;

if ([fileManager fileExistsAtPath: path]) {

    data = [[NSMutableDictionary alloc] initWithContentsOfFile: path];
}
else {
    // If the file doesn’t exist, create an empty dictionary
    data = [[NSMutableDictionary alloc] init];
}

//To insert the data into the plist
[data setObject:@"iPhone 6 Plus" forKey:@"value"];
[data writeToFile:path atomically:YES];

//To retrieve the data from the plist
NSMutableDictionary *savedValue = [[NSMutableDictionary alloc] initWithContentsOfFile: path];
NSString *value = [savedValue objectForKey:@"value"];
NSLog(@"%@",value);
66
Aravindhan

この投稿 。plistプロパティリストに保存 は、そこにある例を見ると役に立ちます。

また、他のガイドラインと例については、Appleの プログラムによるプロパティリストの作成 ドキュメントを確認してください。

4
PengOne

1つのplistファイルだけでデータを保持したい場合は、実際にデータを作成して保存する必要はありません。 NSUserDefaultsと呼ばれるメカニズムがあります。あなたは次のようなことをします

[[NSUserDefaults standardUserDefaults] setInteger:1234 forKey:@"foo"];

そしてあなたは

NSInteger foo=[[NSUserDefaults standardUserDefaults] integerForKey:@"foo"];
// now foo is 1234

保存するファイルの準備、ファイルへの書き込み、アプリの次回の起動時に再度読み取ることは、自動的に行われます!!

公式リファレンス および 公式ドキュメント をお読みください。

3
Yuji