2012-01-05 3 views
0

私には奇妙な問題があります。どんなアイデアも大歓迎です。Plistから配列にデータをロードするときに問題が発生する

私はルートオブジェクトとして配列からなるプロパティリストを持っています。配列にはいくつかの辞書が含まれています。

次のコードは、私は私のarray-

-(void)awakeFromNib{ 

    NSString *plistPath = @"/Users/administrator/Desktop/WipeOut Winner!/Data.plist"; 
    NSLog(@"Plist path is %@",plistPath); 


    if (![[NSFileManager defaultManager] fileExistsAtPath:plistPath]) { 
      NSLog(@"File wasn't found"); 
    } 


    tableDataArray = [[NSMutableArray alloc]initWithContentsOfFile:plistPath]; 

    NSLog(@"array count is %lu",[tableDataArray count]); 

} 

にplistのデータをロードしようとしています方法を示しており、以下の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>root</key> 
    <array> 
     <dict> 
      <key>winner</key> 
      <string>Scott</string> 
      <key>personChosen</key> 
      <string>Female</string> 
      <key>winType</key> 
      <string>2 and &apos;Won&apos; -3 pts.</string> 
      <key>Points</key> 
      <string>3</string> 
     </dict> 
     <dict> 
      <key>winner</key> 
      <string>Emily</string> 
      <key>personChosen</key> 
      <string>Male</string> 
      <key>winType</key> 
      <string>All The Way! -5 pts.</string> 
      <key>points</key> 
      <string>5</string> 
     </dict> 
    </array> 
</dict> 
</plist> 

[ファイル] - plistのですそのはず。そして、私はplistのルートオブジェクトが(辞書の)配列であることを確認しました。この呼び出し後の配列数は常に0になります。

これを理解しようとする過程で、私はplist内のデータを辞書を含む配列ではなく単一のNSDictionaryに変更しました。私はNSDictionaryにplistをロードし、その辞書を配列にロードしました。配列の数は期待どおり1だったので、plistのロード、検索などが正しく行われているかどうかはわかっています。別のテストでは、私はすべて一緒のplistのものをバイパス

tableDataArray = [[NSMutableArray alloc]initWithContentsOfFile:plistPath]; 

の下のようなplistのデータの配列をロードしようとちょうどSO-

tableDataArray =[[NSMutableArray alloc]initWithCapacity:1]; 

NSDictionary *dict = [[NSDictionary alloc]initWithObjectsAndKeys:@"Emily",@"name",@"12",@"age", nil]; 

[tableDataArray addObject:dict]; 

ような配列をロードしてではなく、それも変更します配列は期待どおり1にカウントされます。だから、私の問題はこのことと関係していると思っています。

tableDataArray = [[NSMutableArray alloc]initWithContentsOfFile:plistPath]; 

私はどこから分かりませんか?

答えて

1

plistのルートは配列ではありません。これは、辞書の配列を指す単一のキー "ルート"を持つ辞書です。あなたの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"> 
<array> 
    <dict> 
     <key>winner</key> 
     <string>Scott</string> 
     <key>personChosen</key> 
     <string>Female</string> 
     <key>winType</key> 
     <string>2 and &apos;Won&apos; -3 pts.</string> 
     <key>Points</key> 
     <string>3</string> 
    </dict> 
    <dict> 
     <key>winner</key> 
     <string>Emily</string> 
     <key>personChosen</key> 
     <string>Male</string> 
     <key>winType</key> 
     <string>All The Way! -5 pts.</string> 
     <key>points</key> 
     <string>5</string> 
    </dict> 
</array> 
</plist> 
+0

質問者がそれを理解しようとする過程で、私が代わりに辞書を含む配列の単一NSDictionaryのに私のplist内のデータを変更する」ことを言及ありません。それから私はNSDictionaryにplistをロードしました... "それは質問者がNSArrayで使用しようとした元のplistを見るのを助けるでしょう。 –

+0

@PeterHosey質問のplistが元のplistであることは私の印象です。変更されたplist(これは1つの辞書しかない)は質問には表示されません。 –

+0

強い可能性もあります。 @scottDだけがあいまいさを解決できます。 –

関連する問題