0

plist を読み取ろうとしているときに、非常に奇妙なバグが発生しました。私のplistは次のようになります:

Root (Array)
            Item 0 (Dictionary)
                              title (String)

ログに表示したいtitleので、以下のコードを実行しました。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
NSString *path = [basePath stringByAppendingPathComponent:@"data.plist"];
NSMutableDictionary *dict = [[NSDictionary dictionaryWithContentsOfFile:path] mutableCopy];

NSLog(@"%@", [dict objectForKey:@"title"]);

NSLog(@"Path to plist: %@", path);

このコードでNSLog(@"%@", [dict objectForKey:@"title"]);は、 は " " と等しくなり(null)ます...

私の plist はアプリのドキュメント フォルダーにあり、ログはpathplist への適切なパスを返します。

お願い助けて :)

4

2 に答える 2

0

plist のルートは配列ですが、それを辞書に読み込むとうまくいきません。

あなたがすべき:

  • plist を配列に読み込む
  • get item 0 (objectAtIndex:0) -> これは辞書です
  • この辞書では、objectForKey ... を実行できます。
于 2012-10-28T22:37:09.313 に答える
0

@Tomが言ったように(そしてあなたが最初のコードブロックで言ったように)plistのルートは配列です。

以下を使用して、非常によく似た配列をロードできます。

NSArray *array = [NSArray arrayWithContentsOfFile:path];

次に、次のようにインデックス 0 (辞書) の項目にアクセスできます。

NSDictionary *dict = [array objectAtIndex:0];

または、新しい配列リテラルを備えた Xcode 4.4 以降:

NSDictionary *dict = array[0];

そして、すでに試したようにタイトルをログに記録します:

NSLog(@"%@", [dict objectForKey:@"title"]);

または、新しい構文を使用します。

NSLog(@"%@", dict[@"title"]);
于 2012-10-28T22:40:41.980 に答える