如何将地址字符串转换为地址字典

时间:2014-05-12 11:31:06

标签: macos geocoding addressbook

我使用OSX数据检测器从文本中提取地址。这给了我一些地址字符串,如“ 1 Infinite Loop,Cupertino,CA ” 为了将这些地址放入OSX地址簿,我必须将它们转换为字典,其中包含" Street "," City "," 国家"等
我知道有一个功能可以反过来:ABCreateStringWithAddressDictionary(...),但我需要另一种方式 我知道这一点的唯一方法就是完成(当然,总是过度杀伤)是将地址字符串发送到CLGeocoder,它返回地址的坐标,然后再次发送坐标以进行反向地理编码,返回包含地址字典的地标 必须有一种更简单的方法来做到这一点 的修改
我现在才知道,
1)这个问题非常复杂,并且通过使用地理编码服务器确实做得最好,参见例如here
2)仅与地理编码服务器联系一次就足够了:当在那里发送地址字符串时,会发回一个地址目录。

1 个答案:

答案 0 :(得分:2)

如果您使用的数据检测器类型为NSTextCheckingTypeAddress,则返回的匹配项应提供addressComponents字典。
该词典包含您提到的所有键。

NSDataDetector* detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeAddress error:nil];
NSString* addressString = @"Apple, 1 Infinite Loop, Cupertino, CA";
NSArray* matches = [detector matchesInString:addressString options:0 range:NSMakeRange(0, addressString.length)];
for(NSTextCheckingResult* match in matches)
{
    if(match.resultType == NSTextCheckingTypeAddress)
    {
        NSDictionary* addressComponents = [match addressComponents];
        NSLog(@"Address Dictionary:%@", addressComponents);
    }
}

上面的代码段为输入字符串返回以下内容:

Address Dictionary:{
    City = Cupertino;
    State = CA;
    Street = "1 Infinite Loop";
}

功能齐全的地址字符串会产生以下键的值:

NSTextCheckingNameKey
NSTextCheckingJobTitleKey
NSTextCheckingOrganizationKey
NSTextCheckingStreetKey
NSTextCheckingCityKey
NSTextCheckingStateKey
NSTextCheckingZIPKey
NSTextCheckingCountryKey
NSTextCheckingPhoneKey
NSTextCheckingAirlineKey
NSTextCheckingFlightKey