unidos palabras metros medico los ingles estados cuadrados ciudad américa administracion abreviaturas abreviatura iphone ios clgeocoder

iphone - metros - abreviaturas de palabras



CLPlacemark-abreviaturas de estado? (6)

A partir de al menos iOS 8, la CLPlacemark administrativeArea CLPlacemark devuelve una abreviatura de dos letras para los Estados de los Estados Unidos.

No es necesario que extienda CLPlacemark con una categoría como la que se encuentra en la respuesta aceptada, siempre y cuando esté apuntando a iOS 8 y más reciente (que ya debería estarlo).

CLGeocoder *geocoder = [[CLGeocoder alloc] init]; [geocoder geocodeAddressString:@"1 Infinite Loop, Cupertino, CA" completionHandler:^(NSArray *placemarks, NSError *error) { CLPlacemark *placemark = [placemarks firstObject]; NSLog(@"State: %@", placemark.administrativeArea); }];

Ejecuta esto y obtendrás:

State: CA

Me preguntaba si era posible obtener las abreviaturas del estado de CLPlacemark?

En la referencia de CLPlacemark de Apple dice:

administrativeArea El estado o provincia asociado con la marca de posición. (solo lectura) @property (no atómico, solo lectura) NSString * administrativeArea Discusión Si la ubicación de la marca de posición es la sede de Apple, por ejemplo, el valor de esta propiedad sería la cadena "CA" o "California".

pero cada vez que lo uso, solo obtengo el estado completo (es decir, California) y no la abreviatura (es decir, CA). ¿Puede alguien ayudarme aquí?


Aquí hay otra categoría que usa FormattedAddressLines, que devuelve un resultado como California, CA

-(NSString *) stateWithAbbreviation { if ([[self.addressDictionary objectForKey:@"CountryCode"] isEqualToString:@"US"] && self.addressDictionary) { NSDictionary *addressLines = [self.addressDictionary objectForKey:@"FormattedAddressLines"]; for (NSString* addressLine in addressLines) { NSRange stateRange = [addressLine rangeOfString:self.postalCode options:NSCaseInsensitiveSearch]; if (stateRange.length > 0) { NSRange lastSpace = [addressLine rangeOfString:@" " options:NSBackwardsSearch]; if (lastSpace.length > 0) { NSString *state = [[addressLine substringToIndex:lastSpace.location] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; lastSpace = [state rangeOfString:@" " options:NSBackwardsSearch]; if (lastSpace.length > 0) { NSString *abbr = [[state substringFromIndex:lastSpace.location] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; return [NSString stringWithFormat:@"%@, %@", self.administrativeArea, abbr]; } } } } } return self.administrativeArea; }

No es perfecto, pero funciona siempre que Apple cambie el formato de las líneas de dirección, creo.


Creo que la documentación es simplemente incorrecta. La forma administrativa siempre devolverá el nombre completo del estado para los lugares en los Estados Unidos. Para obtener la abreviatura del estado, lo más probable es que tenga que crear una tabla de consulta de diccionario para que la búsqueda de la clave "California" le devuelva el valor "CA".


Creo que no puedes obtener las abreviaturas de los estados pero puedes crear tu propia clase para esto ...

  • Listar todos los estados (estados son estándares)
  • compara esos estados y devuelve la abreviatura

Código..

Clase StateAbbreviation

StateAbbreviation.h

@interface StateAbbreviation : NSString { } + (NSString *)allStates:(int)index; + (NSString *)abbreviatedState:(NSString *)strState; @end

StateAbbreviation.m

@implementation StateAbbreviation + (NSString *)allStates:(NSString *)strState { // Remove all space on the string strState = [strState stringByReplacingOccurrencesOfString:@" " withString:@""]; //Sample states NSArray *states = [[NSArray alloc] initWithObjects: @"ALABAMA", @"ALASKA", //AK @"AMERICANSAMOA", //AS @"ARIZONA", //AZ @"ARKANSAS", //AR @"CALIFORNIA", //CA nil]; NSUInteger n = [states indexOfObject:strState]; if (n > [states count] - 1) { strAbbreviation = @"NOSTATE"; } else { strAbbreviation =[self abbreviatedState:n]; } [states release]; return strAbbreviation; } + (NSString *)abbreviatedState:(int)index { NSArray *states = [[NSArray alloc] initWithObjects: @"AL", @"AK", @"AS", @"AZ", @"AR", @"CA", nil]; NSString *strAbbreviation = [states objectAtIndex:index]; [states release]; return strAbbreviation; } @end

Cuando llamas a la clase debería ser algo como esto.

NSString *upperCase = [@"California" uppercaseString]; // California could be from (NSString *)placemark.administrativeArea; NSString *abbr = [StateAbbreviation allStates:upperCase]; NSLog(@"%@", abbr); // Result should be CA

Estas son solo muestras que puedes investigar en todos los estados, así como en los estados y sus abreviaturas, así como en los estados y sus abreviaturas.


Para las personas que necesitan la lista de estados con objetos y claves intercambiadas (por ejemplo, en iOS 7, obtengo "CA" de placemark.administrativeArea ):

NSDictionary *nameAbbreviations = [NSDictionary dictionaryWithObjectsAndKeys: @"alabama",@"AL", @"alaska",@"AK", @"arizona",@"AZ", @"arkansas",@"AR", @"california",@"CA", @"colorado",@"CO", @"connecticut",@"CT", @"delaware",@"DE", @"district of columbia",@"DC", @"florida",@"FL", @"georgia",@"GA", @"hawaii",@"HI", @"idaho",@"ID", @"illinois",@"IL", @"indiana",@"IN", @"iowa",@"IA", @"kansas",@"KS", @"kentucky",@"KY", @"louisiana",@"LA", @"maine",@"ME", @"maryland",@"MD", @"massachusetts",@"MA", @"michigan",@"MI", @"minnesota",@"MN", @"mississippi",@"MS", @"missouri",@"MO", @"montana",@"MT", @"nebraska",@"NE", @"nevada",@"NV", @"new hampshire",@"NH", @"new jersey",@"NJ", @"new mexico",@"NM", @"new york",@"NY", @"north carolina",@"NC", @"north dakota",@"ND", @"ohio",@"OH", @"oklahoma",@"OK", @"oregon",@"OR", @"pennsylvania",@"PA", @"rhode island",@"RI", @"south carolina",@"SC", @"south dakota",@"SD", @"tennessee",@"TN", @"texas",@"TX", @"utah",@"UT", @"vermont",@"VT", @"virginia",@"VA", @"washington",@"WA", @"west virginia",@"WV", @"wisconsin",@"WI", @"wyoming",@"WY", nil];


Para cualquier otra persona que necesite una solución para esto, he creado una clase de categoría para CLPlacemark que devuelve la cadena de estado corta. Todo lo que necesitas hacer es llamar a myPlacemark shortState

CLPlacemark + ShortState.h

#import <CoreLocation/CoreLocation.h> #import <Foundation/Foundation.h> @interface CLPlacemark (ShortState) - (NSString *)shortState; @end

CLPlacemark + ShortState.m

#import "CLPlacemark+ShortState.h" @interface CLPlacemark (ShortStatePrivate) - (NSDictionary *)nameAbbreviations; @end @implementation CLPlacemark (ShortState) - (NSString *)shortState { NSString *state = [self.administrativeArea lowercaseString]; if (state.length==0) return nil; return [[self nameAbbreviations] objectForKey:state]; } - (NSDictionary *)nameAbbreviations { static NSDictionary *nameAbbreviations = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ nameAbbreviations = [NSDictionary dictionaryWithObjectsAndKeys: @"AL",@"alabama", @"AK",@"alaska", @"AZ",@"arizona", @"AR",@"arkansas", @"CA",@"california", @"CO",@"colorado", @"CT",@"connecticut", @"DE",@"delaware", @"DC",@"district of columbia", @"FL",@"florida", @"GA",@"georgia", @"HI",@"hawaii", @"ID",@"idaho", @"IL",@"illinois", @"IN",@"indiana", @"IA",@"iowa", @"KS",@"kansas", @"KY",@"kentucky", @"LA",@"louisiana", @"ME",@"maine", @"MD",@"maryland", @"MA",@"massachusetts", @"MI",@"michigan", @"MN",@"minnesota", @"MS",@"mississippi", @"MO",@"missouri", @"MT",@"montana", @"NE",@"nebraska", @"NV",@"nevada", @"NH",@"new hampshire", @"NJ",@"new jersey", @"NM",@"new mexico", @"NY",@"new york", @"NC",@"north carolina", @"ND",@"north dakota", @"OH",@"ohio", @"OK",@"oklahoma", @"OR",@"oregon", @"PA",@"pennsylvania", @"RI",@"rhode island", @"SC",@"south carolina", @"SD",@"south dakota", @"TN",@"tennessee", @"TX",@"texas", @"UT",@"utah", @"VT",@"vermont", @"VA",@"virginia", @"WA",@"washington", @"WV",@"west virginia", @"WI",@"wisconsin", @"WY",@"wyoming", nil]; }); return nameAbbreviations; } @end