Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone IOS通讯簿未从联系人列表中获取所有电话号码_Iphone_Ios_Abaddressbook - Fatal编程技术网

Iphone IOS通讯簿未从联系人列表中获取所有电话号码

Iphone IOS通讯簿未从联系人列表中获取所有电话号码,iphone,ios,abaddressbook,Iphone,Ios,Abaddressbook,我在IOS应用程序中使用Addressbook获取联系人姓名和号码,但奇怪的是,它显示了一些联系人的电话号码 我希望它能显示所有的联系人名单和电话号码 下面是我获取电话号码的代码: -(void)getAddressbookData { #if __IPHONE_OS_VERSION_MIN_REQUIRED < 60000 ABAddressBookRef addressBook = ABAddressBookCreate(); #else

我在IOS应用程序中使用
Addressbook
获取联系人姓名和号码,但奇怪的是,它显示了一些联系人的电话号码

我希望它能显示所有的联系人名单和电话号码

下面是我获取电话号码的代码:

-(void)getAddressbookData
{
    #if __IPHONE_OS_VERSION_MIN_REQUIRED < 60000
        ABAddressBookRef addressBook = ABAddressBookCreate();
    #else
        CFErrorRef *error = nil;
        ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error);
    #endif
        NSArray * people;
        BOOL accessGranted = [self __addressBookAccessStatus:addressBook];

        if (accessGranted)
        {
            people = (__bridge_transfer NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);
            // Do whatever you need with thePeople...
        }
        CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);
        NSMutableArray *contactArray = [[NSMutableArray alloc] init];

        for (CFIndex i = 0; i < nPeople; i++)
        {
            ABRecordRef record = CFArrayGetValueAtIndex((__bridge CFArrayRef)(people), i);
            NSString *firstName = (__bridge NSString *)ABRecordCopyValue(record, kABPersonFirstNameProperty);
            NSString *lastName = (__bridge NSString *)ABRecordCopyValue(record, kABPersonLastNameProperty);
            NSString *fullName = nil;

            if (ABPersonGetCompositeNameFormat() == kABPersonCompositeNameFormatFirstNameFirst)
                fullName = [NSString stringWithFormat:@"%@ %@", firstName, lastName];
            else
                fullName = [NSString stringWithFormat:@"%@, %@", lastName, firstName];

            [contactArray addObject:fullName];

            //
            // Phone Numbers
            //
            ABMutableMultiValueRef phoneNumbers = ABRecordCopyValue(record, kABPersonPhoneProperty);
            CFIndex phoneNumberCount = ABMultiValueGetCount( phoneNumbers );

            NSMutableArray *numbersArray = [[NSMutableArray alloc] init];
            for ( CFIndex k=0; k<phoneNumberCount; k++ )
            {
                CFStringRef phoneNumberLabel = ABMultiValueCopyLabelAtIndex( phoneNumbers, k );
                CFStringRef phoneNumberValue = ABMultiValueCopyValueAtIndex( phoneNumbers, k );
                CFStringRef phoneNumberLocalizedLabel = ABAddressBookCopyLocalizedLabel( phoneNumberLabel );
                // converts "_$!<Work>!$_" to "work" and "_$!<Mobile>!$_" to "mobile"

                // Find the ones you want here
                //
               // NSLog(@"-----PHONE ENTRY -> name:%@ :  %@ : %@", fullName, phoneNumberLocalizedLabel, phoneNumberValue );
                [numbersArray addObject:CFBridgingRelease(phoneNumberValue)];

                CFRelease(phoneNumberLocalizedLabel);
                CFRelease(phoneNumberLabel);
                CFRelease(phoneNumberValue);
            }

           // NSLog(@"phone numbers %@", numbersArray);
            [contactDictionary setObject:numbersArray forKey:fullName];

            CFRelease(record);

        }

        selectContacts = contactArray;
       // NSLog(@"dictionary of array %@", contactDictionary);

        //NSLog(@"contacts count %d", [selectContacts count]);
    }

    -(BOOL)__addressBookAccessStatus:(ABAddressBookRef) addressBook
    {
        __block BOOL accessGranted = NO;

        if (ABAddressBookRequestAccessWithCompletion != NULL) { // we're on iOS 6
            dispatch_semaphore_t sema = dispatch_semaphore_create(0);

            ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
                accessGranted = granted;
                dispatch_semaphore_signal(sema);
            });

            dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
            // dispatch_release(sema);
        }
        else { // we're on iOS 5 or older
            accessGranted = YES;
        }
        return accessGranted;
    }
-(void)getAddressbookData
{
#如果IPHONE操作系统版本最低要求<60000
ABAddressBookRef addressBook=ABAddressBookCreate();
#否则
CFErrorRef*错误=nil;
ABAddressBookRef addressBook=ABAddressBookCreateWithOptions(空,错误);
#恩迪夫
NSArray*人;
BOOL accessgrated=[self\uu addressBookAccessStatus:addressBook];
如果(已授予访问权限)
{
人员=(uuuu bridge_utransfer NSArray*)abAddressBookCopyArrayFallPeople(addressBook);
//对人民做你需要的一切。。。
}
CFIndex nppeople=ABAddressBookGetPersonCount(地址簿);
NSMutableArray*contactArray=[[NSMutableArray alloc]init];
对于(CFIndex i=0;i
    ABAddressBookRef addressBook = ABAddressBookCreate();
    NSArray *people = (NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);
    for(id person in people){
    //fetch multiple phone nos.
        ABMultiValueRef multi = ABRecordCopyValue(person, kABPersonPhoneProperty);
        for (CFIndex j=0; j < ABMultiValueGetCount(multi); j++) {
            NSString* phone = (NSString*)ABMultiValueCopyValueAtIndex(multi, j);
            [numbersArray addObject:phone];
            [phone release];
        }
    }

我正在使用此代码从我的通讯簿中访问手机号码,它工作正常

ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef allSources = ABAddressBookCopyArrayOfAllPeople( addressBook );
for (CFIndex i = 0; i < ABAddressBookGetPersonCount( addressBook ); i++)
    {
ABRecordRef aSource = CFArrayGetValueAtIndex(allSources,i);    
ABMultiValueRef phones =(NSString*)ABRecordCopyValue(aSource, kABPersonPhoneProperty);
        NSString* mobileLabel;

        for(CFIndex i = 0; i < ABMultiValueGetCount(phones); i++) {

            mobileLabel = (NSString*)ABMultiValueCopyLabelAtIndex(phones, i);

            if([mobileLabel isEqualToString:(NSString *)kABPersonPhoneMobileLabel])
            {
                home_mobile = [(NSString*)ABMultiValueCopyValueAtIndex(phones, i) retain];

            }

            if ([mobileLabel isEqualToString:(NSString*)kABPersonPhoneIPhoneLabel])
            {
                basic_mobile = [(NSString*)ABMultiValueCopyValueAtIndex(phones, i)retain];


            }
            if([mobileLabel isEqualToString:(NSString *)kABPersonPhoneMainLabel])
            {
                work_mobile = [(NSString*)ABMultiValueCopyValueAtIndex(phones, i)retain];

            }
        }
ABAddressBookRef addressBook=ABAddressBookCreate();
CFArrayRef allSources=abAddressBookCopyArrayFallPeople(addressBook);
for(CFIndex i=0;i

你可以试试这个。

这是@Samir答案的快速版本,对我来说很有用

var allNumbers: [AnyObject] = []
let adbk : ABAddressBook? = ABAddressBookCreateWithOptions(nil, nil).takeRetainedValue()
let people = ABAddressBookCopyArrayOfAllPeople(adbk).takeRetainedValue() as NSArray as [ABRecord]
for person in people {
    var phones: ABMultiValueRef = ABRecordCopyValue(person, kABPersonPhoneProperty).takeRetainedValue()
    for j in 0..<ABMultiValueGetCount(phones) {
        var phone: String = ABMultiValueCopyValueAtIndex(phones, j).takeRetainedValue() as String
        allNumbers.append(phone)
    }
}
println(allNumbers)
var allNumbers:[AnyObject]=[]
让adbk:ABAddressBook?=ABAddressBookCreateWithOptions(nil,nil).takeRetainedValue()
让people=abAddressBookCopyArrayFallPeople(adbk)。将restainedValue()作为NSArray作为[ABRecord]
为人处事{
var phones:ABMultiValueRef=ABRecordCopyValue(person,kABPersonPhoneProperty)

对于0中的j来说,你正在释放
手机
,这很好,但是你没有释放
多人
地址簿
。通过静态分析器运行此操作,它会指出漏洞。如果你更换
(NSArray*)
(NSString*)的铸件
使用
CfBrigingRelease
,ARC会处理这个问题。(或者如果您使用
\uuuu Bridgeing\u transfer
,比如OP,也会完成同样的事情。)不用说,在iOS 9中,
Contacts
框架完全消除了这个问题,尽管这个问题显然早于该框架。
var allNumbers: [AnyObject] = []
let adbk : ABAddressBook? = ABAddressBookCreateWithOptions(nil, nil).takeRetainedValue()
let people = ABAddressBookCopyArrayOfAllPeople(adbk).takeRetainedValue() as NSArray as [ABRecord]
for person in people {
    var phones: ABMultiValueRef = ABRecordCopyValue(person, kABPersonPhoneProperty).takeRetainedValue()
    for j in 0..<ABMultiValueGetCount(phones) {
        var phone: String = ABMultiValueCopyValueAtIndex(phones, j).takeRetainedValue() as String
        allNumbers.append(phone)
    }
}
println(allNumbers)