Objective-C NSMutableDictionary исчезает - PullRequest
1 голос
/ 14 марта 2010

У меня возникла эта проблема с 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);

 }

Итак, проблема в том, что напечатан только второй адрес, 813, и я не могу понять, почему Кто-нибудь может предложить какую-либо помощь?

Ответы [ 2 ]

5 голосов
/ 14 марта 2010

Это опечатка. Вы всегда присваиваете значения словарю Address1.

1 голос
/ 14 марта 2010

Ответ Лорана правильный, вы назначаете неверный объект.

Лично я стараюсь сводить изменяемые объекты к минимуму при кодировании. Например, вы создаете адреса, которые являются непостоянными словарями, и сохраняете их в непостоянном массиве. Лично я бы использовал неизменный словарь для адресов. Потребовалось бы немного больше кода, чтобы заполнить каждый адрес, но вы могли бы изменить его на другой метод. Дело в том, что вместо изменения адреса. Как побочный эффект, компилятор поймал бы вашу опечатку, потому что вы пытались изменить неизменяемый объект.

На самом деле, возможно, было бы даже лучше создать класс адресов, чем просто заполнять NSDictionary.

...