objective-c - iOS+9中如何从通讯录框架获取家乡城市?

标签 objective-c ios10 abaddressbook cncontact cncontactstore

我正在用 Objective C 中当前的 CNContact 框架替换我过时的 ABAdressBook 代码。我可以整理其中的大部分内容,除了家乡部分,所以让我们重点关注这一点。 目前我有这个代码:

    -(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 中提取城市名称?

最佳答案

-(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);

    }
}

关于objective-c - iOS+9中如何从通讯录框架获取家乡城市?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40218783/

相关文章:

ios - 即使 numberOfRowsInSection 中的 [objects count] 显示 46 个对象,也不会调用 cellForRowAtIndexPath

swift - 我想更改框架的版本。[swift 4/xcode 9]

ios - 从通知中心删除远程通知

ios - 仅 4G 和 iOS10 上的大文件 NSURLSessionDelegate 失败

ios - 以编程方式更改 iOS 上的隐私设置

objective-c - 使用 Cocoa Scripting Bridge 创建 iPhoto 相册

objective-c - 为设备编译,未找到 swift 头文件

objective-c - 为什么 ARC 仍然需要 @autoreleasepool?

ios - 如何获取联系人所属的组?

iphone - 注册地址簿更改,使用 ABAddressBookRegisterExternalChangeCallback