plist ファイルのデータを NSMutableArray に解析しようとしています。
私のplistでは、ルートは6つの数字の配列を含む辞書です
IBOutlet UILabel *lbl4 オブジェクトにフックされたラベルを作成しました。このラベルに、plist を読み取って作成された配列の最初の要素を表示したいと思います。問題は、代入命令 (最後の命令) でプログラムがクラッシュすることです。私のコードはこれです:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docPath = [paths objectAtIndex:0];
NSString *plistPath = [docPath stringByAppendingPathComponent:@"settings.plist"];
if(![[NSFileManager defaultManager] fileExistsAtPath:plistPath]);
{
plistPath = [[NSBundle mainBundle] pathForResource:@"settings" ofType:@"plist"];
}
NSData *plistXML = [[NSFileManager defaultManager] contentsAtPath:plistPath];
NSString *err = nil;
NSPropertyListFormat format;
NSDictionary *temp = (NSDictionary *) [NSPropertyListSerialization propertyListFromData:plistXML mutabilityOption:NSPropertyListMutableContainersAndLeaves format:&format errorDescription:&err];
if(!temp)
{
NSLog(@"Error reading plist: %@, format: %d", err, format);
}
self.dataSet = [NSMutableArray arrayWithArray:[temp objectForKey:@"Dadi"]];
[lbl4 setText:[NSString stringWithFormat:@"%@", [dataSet objectAtIndex:0]]];
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>Dadi</key>
<array/>
<key>D4</key>
<integer>0</integer>
<key>D6</key>
<integer>0</integer>
<key>D8</key>
<integer>0</integer>
<key>D10</key>
<integer>0</integer>
<key>D12</key>
<integer>0</integer>
<key>D20</key>
<integer>0</integer>
</dict>
</plist>
デバッグ出力には、「2012-09-02 18:29:55.483 Faith[6014:707] * キャッチされていない例外 'NSRangeException' が原因でアプリを終了しています。理由: '* -[__NSArrayM objectAtIndex:]: インデックス 0 が空の配列の境界を超えています。 」