Shm*_*idt 15 addressbook ios clgeocoder
试图从AddressDictionary获取格式化地址,这是我从CLGeocoder获得的.使用以下代码,没有结果:
subtitle = [NSString stringWithString:[[addressDict objectForKey:@"FormattedAddressLines"]objectAtIndex:0]];
Run Code Online (Sandbox Code Playgroud)
还尝试过:
subtitle = [[[ABAddressBook sharedAddressBook] formattedAddressFromDictionary:placemark.addressDictionary] string];
Run Code Online (Sandbox Code Playgroud)
但是这段代码似乎只适用于Mac OS X.
编译器询问ABAdressBook,但我导入了两个头文件.
#import <AddressBook/ABAddressBook.h>
#import <AddressBook/AddressBook.h>
Run Code Online (Sandbox Code Playgroud)
小智 40
该addressDictionary物业的文件说:
您可以格式化此字典的内容以获取完整的地址字符串,而不是自己构建地址.要格式化字典,请使用"地址簿UI函数参考"中所述的ABCreateStringWithAddressDictionary函数.
所以添加并导入AddressBookUI框架并尝试:
subtitle =
ABCreateStringWithAddressDictionary(placemark.addressDictionary, NO);
Run Code Online (Sandbox Code Playgroud)
Kla*_*aas 25
在iOS 6.1下进行一些挖掘后,我发现CLPlacemark地址字典包含一个预先格式化的地址:
CLLocation *location = [[CLLocation alloc]initWithLatitude:37.3175 longitude:-122.041944];
[[[CLGeocoder alloc]init] reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
CLPlacemark *placemark = placemarks[0];
NSArray *lines = placemark.addressDictionary[ @"FormattedAddressLines"];
NSString *addressString = [lines componentsJoinedByString:@"\n"];
NSLog(@"Address: %@", addressString);
}];
Run Code Online (Sandbox Code Playgroud)
我还没有找到关于此的文档,但它适用于我测试的所有地址.
teb*_*200 19
正如Martyn Davis强调的那样,ABCreateStringWithAddressDictionary在iOS 9中被弃用了.
您可以使用以下函数将其转换addressDictionary为较新的函数CNMutablePostalAddress,然后使用该函数CNPostalAddressFormatter生成本地化字符串,只要您导入Contacts框架即可.
// Convert to the newer CNPostalAddress
func postalAddressFromAddressDictionary(_ addressdictionary: Dictionary<NSObject,AnyObject>) -> CNMutablePostalAddress {
let address = CNMutablePostalAddress()
address.street = addressdictionary["Street" as NSObject] as? String ?? ""
address.state = addressdictionary["State" as NSObject] as? String ?? ""
address.city = addressdictionary["City" as NSObject] as? String ?? ""
address.country = addressdictionary["Country" as NSObject] as? String ?? ""
address.postalCode = addressdictionary["ZIP" as NSObject] as? String ?? ""
return address
}
// Create a localized address string from an Address Dictionary
func localizedStringForAddressDictionary(addressDictionary: Dictionary<NSObject,AnyObject>) -> String {
return CNPostalAddressFormatter.string(from: postalAddressFromAddressDictionary(addressDictionary), style: .mailingAddress)
}
Run Code Online (Sandbox Code Playgroud)
import Contacts
// Convert to the newer CNPostalAddress
func postalAddressFromAddressDictionary(addressdictionary: Dictionary<NSObject,AnyObject>) -> CNMutablePostalAddress {
let address = CNMutablePostalAddress()
address.street = addressdictionary["Street"] as? String ?? ""
address.state = addressdictionary["State"] as? String ?? ""
address.city = addressdictionary["City"] as? String ?? ""
address.country = addressdictionary["Country"] as? String ?? ""
address.postalCode = addressdictionary["ZIP"] as? String ?? ""
return address
}
// Create a localized address string from an Address Dictionary
func localizedStringForAddressDictionary(addressDictionary: Dictionary<NSObject,AnyObject>) -> String {
return CNPostalAddressFormatter.stringFromPostalAddress(postalAddressFromAddressDictionary(addressDictionary), style: .MailingAddress)
}
Run Code Online (Sandbox Code Playgroud)
ZYi*_*iOS 12
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
// get the address
if let location = locations.last {
CLGeocoder().reverseGeocodeLocation(location, completionHandler: { (result: [CLPlacemark]?, err: NSError?) -> Void in
if let placemark = result?.last
, addrList = placemark.addressDictionary?["FormattedAddressLines"] as? [String]
{
let address = addrList.joinWithSeparator(", ")
print(address)
}
})
}
}
Run Code Online (Sandbox Code Playgroud)
以上是快速版本.
| 归档时间: |
|
| 查看次数: |
27302 次 |
| 最近记录: |