Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.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
从iOS SDK获取iPhone联系人时出现问题_Ios_Iphone_Xcode_Ios6_Xcode5 - Fatal编程技术网

从iOS SDK获取iPhone联系人时出现问题

从iOS SDK获取iPhone联系人时出现问题,ios,iphone,xcode,ios6,xcode5,Ios,Iphone,Xcode,Ios6,Xcode5,我正在我的应用程序中获取iPhone联系人列表。我为此制作了一个示例应用程序,并像那样打印了它的值,它运行良好 ABAddressBookRef ab=ABAddressBookCreate(); NSArray *arrTemp=(NSArray *)ABAddressBookCopyArrayOfAllPeople(ab); NSLog(@"Array===%@",arrTemp); NSMutableArray *arrContact=[[NSMutableA

我正在我的应用程序中获取iPhone联系人列表。我为此制作了一个示例应用程序,并像那样打印了它的值,它运行良好

 ABAddressBookRef ab=ABAddressBookCreate();
    NSArray *arrTemp=(NSArray *)ABAddressBookCopyArrayOfAllPeople(ab);

    NSLog(@"Array===%@",arrTemp);

    NSMutableArray *arrContact=[[NSMutableArray alloc] init];

    for (int i=0;i<[arrTemp count];i++)
    {
        NSMutableDictionary *dicContact=[[NSMutableDictionary alloc] init];
        NSString *str=(NSString *) ABRecordCopyValue([arrTemp objectAtIndex:i], kABPersonFirstNameProperty);
        @try
        {
            [dicContact setObject:str forKey:@"name"];
        }
        @catch (NSException * e) {
            [dicContact release];
            continue;
        }
        [arrContact addObject:dicContact];
        [dicContact release];
    }

    NSLog(@"arrContact===%@",arrContact);
ABAddressBookRef ab=ABAddressBookCreate();
NSArray*arrTemp=(NSArray*)ABAddressBookCopyArrayOfAllPeople(ab);
NSLog(@“数组===%@”,arrTemp);
NSMutableArray*arrContact=[[NSMutableArray alloc]init];

对于(int i=0;i从iOS6开始,您需要用户权限才能从通讯簿访问联系人。您也没有请求权限。可能是因为您没有获得联系人。我在我的应用程序中使用了此代码(由其他人编写)


谢谢,我实际上错过了这一部分。我必须在数组中提取手机号码,该号码应该在另一个数组中的名称出现的特定位置,但当我使用上述代码时,手机号码会发生变化。你能告诉我如何用用户名获取相应的用户号码吗。你对我在问题中提出的其他问题有什么线索吗?我从未使用过addr直接使用ess book方法。我使用了一个包装器。它非常容易使用。你不必担心ABAddressBook c api的问题。Anil,如何使用这段代码。我也面临着同样的问题issue@MssiOS你的问题是什么?目标代码。你用的是ObjC还是Swift?
CFErrorRef *error = NULL;
    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error);
    CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
    CFIndex numberOfPeople = ABAddressBookGetPersonCount(addressBook);

    for(int i = 0; i < numberOfPeople; i++) {

        ABRecordRef person = CFArrayGetValueAtIndex( allPeople, i );

        NSString *firstName = (NSString *)(ABRecordCopyValue(person, kABPersonFirstNameProperty));
        NSString *lastName = (NSString *)(ABRecordCopyValue(person, kABPersonLastNameProperty));
        NSLog(@"Name:%@ %@", firstName, lastName);

        ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);

        //NSLog(@"\n%@\n", [[UIDevice currentDevice] name]);

        for (CFIndex i = 0; i < ABMultiValueGetCount(phoneNumbers); i++)
        {
            NSString *phoneNumber = (NSString *) ABMultiValueCopyValueAtIndex(phoneNumbers, i);

            NSLog(@"phoneNumber======%@",phoneNumber);
        }
    }
 + (BOOL)getAccessPermission
{
    __block BOOL accessGranted = NO;
    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
    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;
}