联系框架。访问手机'值

时间:2015-10-19 10:47:12

标签: ios contacts

- (void)viewDidLoad {
    [super viewDidLoad];
    self.givenName = [[NSMutableArray alloc]init];

    NSArray *KeysToFetch = @[CNContactGivenNameKey, CNContactFamilyNameKey, CNContactPhoneNumbersKey ];
    NSString *containerId = [[[CNContactStore alloc]init]defaultContainerIdentifier];
    NSPredicate *predicate = [CNContact predicateForContactsInContainerWithIdentifier:containerId];

    _contacts = [[[CNContactStore alloc]init]unifiedContactsMatchingPredicate:predicate keysToFetch:KeysToFetch error:nil];

    for (CNContact *c  in _contacts) {

        [_givenName addObject:c.givenName];
        NSLog(@"%@", c.phoneNumbers);
    }
}

嗨,我怎样才能访问'数字'值?当我做一个NSLog的电话号码'我在控制台上得到这个:

2015-10-19 12:33:41.423 testContacts[7064:2001002] (
"<CNLabeledValue: 0x7b72eed0: identifier=A73ABAA0-7698-47D7-A2BD-630E04C0C811, label=_$!<Mobile>!$_, value=<CNPhoneNumber: 0x7b734db0: countryCode=us, digits=8885555512>>",
"<CNLabeledValue: 0x7b72eb80: identifier=BC927A1D-AA98-4E67-82A9-BB5AD09A6CAE, label=_$!<Home>!$_, value=<CNPhoneNumber: 0x7b72ecd0: countryCode=us, digits=8885551212>>"

5 个答案:

答案 0 :(得分:9)

如果电话号码已使用1 (234) 456-78等电话号码进行本地化,则stringValue会返回该字符串。

要获得数字,正确的代码(在Swift中)是

(contact.phoneNumbers[0].value as! CNPhoneNumber).valueForKey("digits") as! String

答案 1 :(得分:3)

数字是私有变量。 获取电话号码:

CNLabeledValue<CNPhoneNumber*>* labeledValue = contact.phoneNumbers[0];
NSString *phone = labeledValue.value.stringValue;

E.g。获得手机号码:

// get mobile
NSString *phone = nil;
for (CNLabeledValue<CNPhoneNumber*>* labeledValue in contact.phoneNumbers)
{
    if ([labeledValue.label isEqualToString:CNLabelPhoneNumberMobile])
    {
        phoneNumber = labeledValue.value.stringValue;
        break;
    }
}

答案 2 :(得分:1)

这在Swift 2.1中对我有用。 / Xcode 7.2。和iOS 9.2.1。

  1. import ContactsUI
  2. 导入文件底部的联系人框架

    1. 从您的地址簿
    2. 获取联系人

      这是我的例子:

        

      let contacts = XXXContactsAccessManagerM.sharedContacts.getAll()

      1. 将此代码添加到您正在其中工作的班级ModelViewController

        for var ctcCtr = 0 ; ctcCtr < contacts.count ; ctcCtr++
        {
            let contact = contacts[ctcCtr]
            let phoneNumbers = contact.phoneNumbers
        
            for var phnCtr = 0 ; phnCtr < phoneNumbers.count ; phnCtr++
            {
                let phoneNumberLabel = phoneNumbers[phnCtr]
                let phoneNumber = (phoneNumberLabel.value as! CNPhoneNumber).valueForKey("digits") as! String
                print(phoneNumber)
            }
        }
        
      2. 我有一个正常的电话号码,我在电话簿097XXXXXXX中编写的确切方式等等......(不包括(XXX)和XXX-XXX)

答案 3 :(得分:0)

使用KPKContacts包很简单,就像调用一样 contact.firstNumberAvailable()返回String值

或者你可以contact.numbers.first!.number

答案 4 :(得分:0)

此代码非常有助于在swift 3.1中获取电话号码值和电话号码标签

RelativeLayout