sri*_*jay 18 iphone ios clgeocoder
我想知道是否可以从CLPlacemark获得州缩写?
在Apple的CLPlacemark参考中,它指出:
administrativeArea与地标关联的州或省.(只读)@property(非原子,只读)NSString*administrativeArea讨论例如,如果地标位置是Apple的总部,则此属性的值将是字符串"CA"或"California".
但每当我使用它时,我只获得完整状态(即加利福尼亚州)而不是缩写(即CA).有人能帮我一下吗?
Chr*_*isH 33
对于其他需要解决方案的人来说,我已经为CLPlacemark创建了一个返回短状态字符串的类别类.你需要做的就是打电话myPlacemark shortState
CLPlacemark + ShortState.h
#import <CoreLocation/CoreLocation.h>
#import <Foundation/Foundation.h>
@interface CLPlacemark (ShortState)
- (NSString *)shortState;
@end
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我想你不能得到状态的缩写,但你可以为此创建自己的类.
码..
类StateAbbreviation
StateAbbreviation.h
@interface StateAbbreviation : NSString {
}
+ (NSString *)allStates:(int)index;
+ (NSString *)abbreviatedState:(NSString *)strState;
@end
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
当你打电话给班级时,它应该是这样的
NSString *upperCase = [@"California" uppercaseString]; // California could be from (NSString *)placemark.administrativeArea;
NSString *abbr = [StateAbbreviation allStates:upperCase];
NSLog(@"%@", abbr); // Result should be CA
Run Code Online (Sandbox Code Playgroud)
这只是你可以研究所有状态的样本,状态和它们的缩写也像这种状态和它们的缩写
归档时间: |
|
查看次数: |
5959 次 |
最近记录: |