2016-11-01 2 views
0

nilをplistのリターンから文字列へのアクセスはここでは、コードは次のとおり

NSString* filepath = [[NSBundle mainBundle] 
         pathForResource:@"Stones" ofType:@"plist"]; 
NSDictionary *stones = [NSDictionary dictionaryWithContentsOfFile:filepath]; 
NSArray* array = stones[@"StoneArray"]; 
NSDictionary* dic = array[stoneInt]; 
NSString* string = [[NSString alloc] init]; 
string = dic[[NSString stringWithFormat:@"%d", stoneInt]]; 
return string; 
stoneInt

は0から59の数(デフォルトの場合には、11'S)です。

私はreturnの文にブレークポイントを設定し、stoneIntは(それがあるべきとおり)11で、まだstringnilです。私は間違って何をしていますか?

また、私がdicを解析すると、それは正しく11のキーと文字列Mazeで動作していることを示しています。ここで


がPLISTのソースコードです:

<plist version="1.0"> 
<dict> 
    <key>StoneArray</key> 
    <array> 
     <dict> 
      <key>1</key> 
      <string>Ocean</string> 
     </dict> 
     <dict> 
      <key>2</key> 
      <string>Grass</string> 
     </dict> 

これは文字列59.私は返すようにしようとしている文字列までになっている(これらのいずれかの場合に、のは、ケース1を見てみましょう) "海洋"。私のstringオブジェクトは常にnilです。

+0

なぜ2つの異なる方法で 'stoneInt'を2回使用しますか?あなたはまず 'array'へのインデックスとしてそれを使い、あなたに辞書を与えます。 'stoneInt'を文字列に変換し、それを辞書にキーとして使用します。それは本当に奇妙に思える。 – rmaddy

+0

私は文字列の配列があったときに最初にエラーを受け取りました。あなたがplistを作成し、 "Item 0、Item 1、etc."を見ると、それらを文字列として使用し、 'NSString * string = array [[NSString stringWithFormat:@"%d "、stoneInt]]; –

+0

どちらの方法でも、文字列に 'nil'が残っています –

答えて

0

私の謝罪は、値stoneIntが実際に私がアクセスしようとしていたキーよりも小さいことが判明しました。 stoneIntは11でしたが、アクセスに使用されたキーは12と識別されました。