【问题标题】:How to obtain Home City from Contacts Framework in iOS +9?iOS+9中如何从Contacts Framework中获取家乡城市?
【发布时间】:2016-10-24 12:43:55
【问题描述】:

我正在用 Objective C 中当前的 CNContact 框架替换我过时的 ABAdressBook 代码。我可以整理其中的大部分内容,除了 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 中提取城市名称?

【问题讨论】:

    标签: objective-c ios10 abaddressbook cncontact cncontactstore


    【解决方案1】:
    -(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);
    
        }
    }
    

    【讨论】:

      【解决方案2】:
      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);
              }            
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-13
        • 2013-02-08
        • 1970-01-01
        • 2016-07-16
        • 1970-01-01
        • 2015-10-27
        • 2017-07-17
        • 2019-05-27
        相关资源
        最近更新 更多