在Objective C中,我正在用当前的ABAdressBook框架替换我过时的CNContact代码。我可以整理出大部分代码,除了Home City部分,所以让我们把重点放在这里。目前我有这样的代码:
-(NSArray *)getLandAddressesForContactIOS6:(ABRecordRef)recordRef {
ABMultiValueRef addresses = ABRecordCopyValue(recordRef, kABPersonAddressProperty);
NSMutableArray *formattedAddressesResponse = [NSMutableArray array];
for(CFIndex i = 0; i < ABMultiValueGetCount(addresses); i++) {
NSString *label = (__bridge NSString *)ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(addresses, i));
NSDictionary *addressComponents = (__bridge NSDictionary*)ABMultiValueCopyValueAtIndex(addresses, i);
NSString *street = [addressComponents objectForKey:(NSString *)kABPersonAddressStreetKey];
NSString *city = [addressComponents objectForKey:(NSString *)kABPersonAddressCityKey];
NSString *formattedAddress = ABCreateStringWithAddressDictionary(addressComponents, YES);
NSMutableDictionary *currentAddressResponse = [NSMutableDictionary dictionaryWithObjectsAndKeys:
label, @"type",
label, @"label",
nil];
if (street != nil) {
[currentAddressResponse setObject:street forKey:@"street"];
}
if (city != nil) {
[currentAddressResponse setObject:city forKey:@"city"];
}
if (formattedAddress != nil) {
[currentAddressResponse setObject:formattedAddress forKey:@"formattedAddress"];
}
[formattedAddressesResponse addObject:currentAddressResponse];
}
return formattedAddressesResponse;
}对于iOS 9+,该代码已被弃用,因此我要使用新的联系人框架获得家乡城市的最接近信息是:
-(NSArray *)getLandAddressesForContactIOS10:(CNContact*)recordRef {
NSArray <CNLabeledValue<CNPostalAddress *> *> *addresses = recordRef.postalAddresses;
NSMutableArray *formattedAdressResponse = [NSMutableArray array];
for(CFIndex i = 0; i < addresses.count; i++) {
CNLabeledValue *addressi = [addresses objectAtIndex:i];
//NSString *city = addressi.??????; //Stuck here, don't know what else to do如何从CNContact中提取城市名称??
发布于 2016-12-15 17:50:26
-(void )getLandAddressesForContactIOS10:(CNContact*)contact
{
for (CNLabeledValue<CNPostalAddress*>* labeledValue in contact.postalAddresses)
{
NSLog(@"%@",labeledValue.value.city);
NSLog(@"%@",labeledValue.value.street);
NSLog(@"%@",labeledValue.value.state);
NSLog(@"%@",labeledValue.value.postalCode);
NSLog(@"%@",labeledValue.value.ISOCountryCode);
}
}发布于 2018-11-15 17:43:27
NSArray *addresses = (NSArray*)[contact.postalAddresses valueForKey:@"value"];
if (!(addresses == nil) && addresses.count > 0)
{
for (CNLabeledValue<CNPostalAddress*>* labeledValue in contact.postalAddresses)
{
NSString *city = labeledValue.value.city;
NSLog(@"City = %@",city);
NSString *street = labeledValue.value.street;
NSLog(@"Street = %@",street);
NSString *state = labeledValue.value.state;
NSLog(@"State = %@",state);
NSString *postalCode = labeledValue.value.postalCode;
NSLog(@"PostalCode = %@",postalCode);
NSString *ISOCountryCode = labeledValue.value.ISOCountryCode;
NSLog(@"ISOCountryCode = %@",ISOCountryCode);
}
}
else
{
NSLog(@"No addresses for name = %@",strname);
} https://stackoverflow.com/questions/40218783
复制相似问题