0

次のコードを使用してNSMutableDictionaryを参照しています

        NSMutableDictionary *item;
        for (item in menuArray) {
            BSThirdLayerViewController *nextLayer = [[BSThirdLayerViewController alloc] initWithStyle:UITableViewStylePlain];
            nextLayer.title = [item valueForKey:@"title"];
            nextLayer.rowImage = [item valueForKey:@"image"];
            [array addObject:nextLayer];
        }

辞書は次の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>Item 0</key>
<dict>
    <key>title</key>
    <string>East Coast</string>
</dict>
<key>Item 1</key>
<dict>
    <key>title</key>
    <string>West Coast</string>
</dict>
<key>Item 2</key>
<dict>
    <key>title</key>
    <string>South Rhodes</string>
</dict>
</dict>
</plist>

for-inループ中にitem変数はどのような種類のデータを持ちますか?アクセスしようとするとプログラムがクラッシュする

[item valueForKey:@"title"];

論理的に思えますが、何が起こっているのでしょうか。

お時間をいただきありがとうございます。

4

1 に答える 1

1

plist は、配列ではなく辞書を定義しているように見えます。したがって、"item" はキー (つまり、文字列)、Item 0、Item 1 などになります。そのキーを使用すると、NSDictionary *dict = [dictionary objectForKey:item] を使用して、そのキーの値を辞書に問い合わせることができます。 ;

この種の問題が発生した場合は、システムに助けてもらいましょう。NSLog() を使用して plist から作成したオブジェクトの内容をコンソールにダンプして確認してください。これにより、多くの時間を節約でき、実際に必要なものが得られていることを確認できます。

于 2012-07-20T11:32:13.193 に答える