1

値が表示されない NSMutableDictionary でこの問題が発生しています。私のコードのスニペットは次のようになります。

//データをハッシュに、次に配列に

yellowPages = [[NSMutableArray alloc] init];


 NSMutableDictionary *address1=[[NSMutableDictionary alloc] init];
 [address1 setObject:@"213 Pheasant CT" forKey: @"Street"];
 [address1 setObject:@"NC" forKey: @"State"];
 [address1 setObject:@"Wilmington" forKey: @"City"];
 [address1 setObject:@"28403" forKey: @"Zip"];
 [address1 setObject:@"Residential" forKey: @"Type"];

 [yellowPages addObject:address1];


 NSMutableDictionary *address2=[[NSMutableDictionary alloc] init];
 [address1 setObject:@"812 Pheasant CT" forKey: @"Street"];
 [address1 setObject:@"NC" forKey: @"State"];
 [address1 setObject:@"Wilmington" forKey: @"City"];
 [address1 setObject:@"28403" forKey: @"Zip"];
 [address1 setObject:@"Residential" forKey: @"Type"];

 [yellowPages addObject:address2];

 //Iterate through array pulling the hash and insert into Location Object
 for(int i=0; i<locationCount; i++){
  NSMutableDictionary *anAddress=[theAddresses getYellowPageAddressByIndex:i];

  //Set Data Members
  Location *addressLocation=[[Location alloc] init];
  addressLocation.Street=[anAddress objectForKey:@"Street"];
  locations[i]=addressLocation;
  NSLog(addressLocation.Street);

 }

問題は、2 番目のアドレス (813) だけが表示されることで、その理由がわかりません。誰でも助けを提供できますか?

4

2 に答える 2

5

タイプミスです。常に Address1 ディクショナリに値を割り当てています。

于 2010-03-14T09:03:49.363 に答える
1

ローランの答えは正しいです。間違ったオブジェクトに割り当てています。

個人的には、コードを書くときは可変オブジェクトを最小限に抑えるようにしています。たとえば、変更可能な辞書である住所を作成し、それらを変更可能な配列に格納しています。個人的には、アドレスには不変の辞書を使用します。各アドレスを入力するにはもう少しコードが必要ですが、それを別の方法にリファクタリングできます。ポイントは、アドレスを変更するのではなく、ということです。副作用として、不変オブジェクトを変更しようとしていたため、コンパイラがタイプミスを検出した可能性があります。

実際には、単に NSDictionary に値を設定するよりも、アドレス クラスを作成した方がよいでしょう。

于 2010-03-14T13:48:39.503 に答える