Вопрос перечисления - PullRequest
0 голосов
/ 08 июля 2011
NSMutableArray *tempMutableArray = [[NSMutableArray alloc] init];
if (street != NULL) {
[tempMutableArray addObject:(NSString *)street];
}
if (city != NULL) {
[tempMutableArray addObject:(NSString *)city];
}
if (state != NULL) {
[tempMutableArray addObject:(NSString *)state];
}                    
if (zip != NULL) {
[tempMutableArray addObject:(NSString *)zip];
}
if (country != NULL) {
// Check to see if the country is USA/Canada
NSStringCompareOptions  compareOptions = NSDiacriticInsensitiveSearch;
NSArray* countryIndex = [[NSArray alloc] initWithObjects:@"United States of America", @"United States", @"U.S.A.", @"USA", @"US", @"U.S.", @"Canada", @"CAN", @"CDN", @"CA", nil];

for (NSString* element in countryIndex) 
{
NSComparisonResult result = [(NSString *)country compare:element options:compareOptions];
if (NSOrderedSame == result) {
// Do another thing here if they match...
CFRelease(country);
country = CFStringCreateWithCString(NULL, "", kCFStringEncodingUTF8);
}
else {
// Try something else...
[tempMutableArray addObject:(NSString *)country];
}
}
}
for (NSString* element in tempMutableArray) 
{
    syntheticAddress = [syntheticAddress stringByAppendingString:[NSString stringWithFormat:@"%@ ,", element]];
NSLog(@"synthetic address is %@", syntheticAddress);
}

Проблема в том, что на выходе получаются чрезмерные записи

2011-07-08 14:42:38.077 TestingApp[3770:ef03] synthetic address is 123 Main Street ,
2011-07-08 14:42:40.673 TestingApp[3770:ef03] synthetic address is 123 Main Street ,SomeCity ,
2011-07-08 14:42:42.510 TestingApp[3770:ef03] synthetic address is 123 Main Street ,SomeCity ,AA ,
2011-07-08 14:42:44.136 TestingApp[3770:ef03] synthetic address is 123 Main Street ,SomeCity ,AA ,00000 ,
2011-07-08 14:42:45.637 TestingApp[3770:ef03] synthetic address is 123 Main Street ,SomeCity ,AA ,00000 ,United States ,
2011-07-08 14:42:49.968 TestingApp[3770:ef03] synthetic address is 123 Main Street ,SomeCity ,AA ,00000 ,United States , ,
2011-07-08 14:42:52.046 TestingApp[3770:ef03] synthetic address is 123 Main Street ,SomeCity ,AA ,00000 ,United States , , ,
2011-07-08 14:42:54.306 TestingApp[3770:ef03] synthetic address is 123 Main Street ,SomeCity ,AA ,00000 ,United States , , , ,
2011-07-08 14:42:55.730 TestingApp[3770:ef03] synthetic address is 123 Main Street ,SomeCity ,AA ,00000 ,United States , , , , ,
2011-07-08 14:42:58.487 TestingApp[3770:ef03] synthetic address is 123 Main Street ,SomeCity ,AA ,00000 ,United States , , , , , ,
2011-07-08 14:43:00.035 TestingApp[3770:ef03] synthetic address is 123 Main Street ,SomeCity ,AA ,00000 ,United States , , , , , , ,
2011-07-08 14:43:01.237 TestingApp[3770:ef03] synthetic address is 123 Main Street ,SomeCity ,AA ,00000 ,United States , , , , , , , ,
2011-07-08 14:43:06.263 TestingApp[3770:ef03] synthetic address is 123 Main Street ,SomeCity ,AA ,00000 ,United States , , , , , , , , ,
2011-07-08 14:43:10.537 TestingApp[3770:ef03] Address is 123 Main Street ,SomeCity ,AA ,00000 ,United States , , , , , , , ,

Я бы хотел, чтобы результат был только

2011-07-08 14:42:38.077 TestingApp[3770:ef03] synthetic address is 123 Main Street ,
2011-07-08 14:42:40.673 TestingApp[3770:ef03] synthetic address is 123 Main Street ,SomeCity ,
2011-07-08 14:42:42.510 TestingApp[3770:ef03] synthetic address is 123 Main Street ,SomeCity ,AA ,
2011-07-08 14:42:44.136 TestingApp[3770:ef03] synthetic address is 123 Main Street ,SomeCity ,AA ,00000

1 Ответ

1 голос
/ 08 июля 2011

Ваш NSLog находится внутри цикла for.

РЕДАКТИРОВАТЬ:

for (NSString* element in countryIndex) 
{
      NSComparisonResult result = [(NSString *)country compare:element options:compareOptions];
      if (NSOrderedSame == result) {
              // Do another thing here if they match...
              CFRelease(country);
              country = CFStringCreateWithCString(NULL, "", kCFStringEncodingUTF8);
       }
       else {
          // Try something else...
          [tempMutableArray addObject:(NSString *)country];
       }
 }

Посмотрите на код выше. Ваше условие if будет успешно выполнено только один раз (я предполагаю) .. но ваше условие else будет выполнено для всех других несоответствий. И каждый раз, когда это не удается, вы добавляете объект страны в ваш tempMutableArray. Это то, что вы хотите?

РЕДАКТИРОВАТЬ 2: Это должен быть правильный способ сделать это.

for (NSString* element in countryIndex) 
{
      NSComparisonResult result = [(NSString *)country compare:element options:compareOptions];
      if (NSOrderedSame == result) {
          [tempMutableArray addObject:(NSString *)country];
          break;
       }
       else {
          // Try something else...
          // No match. Go on to the next element compare.
       }
 }
...