1

次のように NSDictionary を保存しています。

 NSDictionary *menuList = [[NSDictionary alloc]initWithDictionary:xmlParser.items];
 NSArray  *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
 NSString *directory = [paths objectAtIndex:0];
 NSString *fileName = [NSString stringWithUTF8String:MENU_LIST_NAME];
 NSString *filePath = [directory stringByAppendingPathComponent: fileName];
 [menuList writeToFile:filePath atomically:YES]

ここに画像の説明を入力

ご覧のとおり、ディクショナリは本来あるべきデータで満たされています。

次のようにファイルから読み取ります。

NSArray  *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *directory = [paths objectAtIndex:0];
NSString *fileName = [NSString stringWithUTF8String:MENU_LIST_NAME];
NSString *filePath = [directory stringByAppendingPathComponent:fileName];
NSDictionary *theMenu = [[NSDictionary alloc] initWithContentsOfFile:filePath];

ただし、ここでは空のオブジェクトのみを取得します:

ここに画像の説明を入力

私はこれについての解決策を見つけることができません。助けてください。ありがとうございました。編集:ファイルの内容(正しく書かれているようです)

<dict>
<key>left</key>
<array>
    <dict>
        <key>id</key>
        <string>1</string>
        <key>level</key>
        <string>1</string>
        <key>link</key>
        <string>
        LoginActivity</string>
        <key>linkType</key>
        <string>internal</string>
        <key>state</key>
        <string>ANY</string>
        <key>title</key>
        <string>


        Login</string>
        <key>visible</key>
        <true/>
    </dict>
            etc....
4

5 に答える 5

3

あなたのファイルは適切な plist ではないようです。ドキュメントから:

initWithContentsOfFile: 特定のパスにあるファイルで見つかったキーと値を使用して、新しく割り当てられたディクショナリを初期化します。

パスで識別されるファイルのディクショナリ表現には、プロパティ リスト オブジェクト(NSString、NSData、NSDate、NSNumber、NSArray、または NSDictionary オブジェクト) のみを含める必要があります。詳細については、「プロパティ リスト プログラミング ガイド」を参照してください。このディクショナリに含まれるオブジェクトは、ディクショナリが可変であっても不変です。

于 2013-08-21T15:18:48.130 に答える
1

オブジェクトが空ではありませんでした。Xcodeデバッガーは、どういうわけかそれらが空であることを示しました。誰かが同じ問題を抱えている場合は、これを検討してください。時間を大幅に節約できます。

于 2013-08-22T07:19:14.383 に答える
1

コマンドラインを試す

plutil path-to-your-file

おそらく、ファイルに何か問題があることがわかります。

于 2013-08-21T18:45:17.623 に答える
1

この新しい辞書に値をコピーするのではなく、ポインターをコピーしているため、コンテンツを取得しようとすると参照が失われる可能性があると思います。使用してみて 、xmlParser の項目が(非アトミック、保持)プロパティとして宣言されてNSDictionary *menuList = [NSDictionary dictionaryWithDictionary: xmlParser.items;いることを確認してください。

于 2013-08-21T18:57:46.057 に答える
-1

initWithContentsOfFile を使用して /Library/Preferences から plist を読み取る同様の問題がありました。ターゲットのバンドル識別子と plist の逆ドメイン名が一致しないと、nil が返されることもあります。

于 2016-02-05T16:24:27.637 に答える