是否可以检查联系人是否存在于iPhone的联系人列表中?

时间:2014-06-11 10:35:23

标签: ios cocoa-touch abaddressbook

我正在开发一个应用程序,我必须在地址簿中保存联系人,但如果联系人已保存在联系人中,则不应保存。

但我不知道是否可以检查联系人是否退出iPhone的联系人列表?

任何帮助都将不胜感激。

提前致谢。

5 个答案:

答案 0 :(得分:4)

解决了问题

 -(void)CheckContactIsExits{
  ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);

NSArray *allContacts = (__bridge NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);

ABRecordRef pet = ABPersonCreate();
ABRecordSetValue(pet, kABPersonFirstNameProperty, (__bridge CFStringRef)@"VoxSci Activation", nil);

for (id record in allContacts){
    ABRecordRef thisContact = (__bridge ABRecordRef)record;
    if (CFStringCompare(ABRecordCopyCompositeName(thisContact),
                        ABRecordCopyCompositeName(pet), 0) == kCFCompareEqualTo){

        NSLog(@"The contact already exists");
        //The contact already exists!
        isContactExits=YES;
    }

}
}

答案 1 :(得分:0)

假设您使用Apples框架,您的用户将获得选择"创建新联系人"或者如果它已经在联系人列表中,则添加到现有联系人"。因此,用户可以决定是否应该添加

答案 2 :(得分:0)

#import <AddressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>

阅读iPhone中的所有联系人,并检查姓名或电话是否退出。

答案 3 :(得分:0)

检查联系人是退出还是不通过联系号码

注意:只能用检查联系电话

替换 checkingPhoneNumber 变量
ABAddressBookRef * addressbook = ABAddressBookCreateWithOptions(Nil, Nil);
NSArray *people = (__bridge NSArray*)ABAddressBookCopyArrayOfAllPeople(addressbook);
NSMutableArray *phoneArray=[[NSMutableArray alloc] init];

for(id person in people)
{
    // get person contact number
    ABMultiValueRef phones = (ABMultiValueRef)ABRecordCopyValue((__bridge ABRecordRef)(person), kABPersonPhoneProperty);
    NSString* mobile=@"";
    NSString* mobileLabel;

    for (int i=0; i < ABMultiValueGetCount(phones); i++)
    {
        mobileLabel = (__bridge NSString*)ABMultiValueCopyLabelAtIndex(phones, i);
        if([mobileLabel isEqualToString:(NSString *)kABPersonPhoneMobileLabel]) {
            NSLog(@"mobile:");
        } else if ([mobileLabel isEqualToString:(NSString*)kABPersonPhoneIPhoneLabel]) {
            NSLog(@"iphone:");
        } else if ([mobileLabel isEqualToString:(NSString*)kABPersonPhonePagerLabel]) {
            NSLog(@"pager:");
        }
        mobile = (__bridge NSString*)ABMultiValueCopyValueAtIndex(phones, i);
        NSLog(@"%@", mobile);

        // remove all spaces bracket from contact number
        NSMutableString *newPhoneStr = [[NSMutableString alloc] init];;
        int j = [mobile length];
        for (int i=0; i<j; i++)
        {
            if ([mobile characterAtIndex:i] >=48 && [mobile characterAtIndex:i] <=59)
            {
                [newPhoneStr appendFormat:@"%c",[mobile characterAtIndex:i]];
            }
        }
        //add contact into phoneArray
        [phoneArray addObject:newPhoneStr];
    }
}
NSLog(@"%@",phoneArray);

BOOL identicalStringFound = NO;

// remove all spaces bracket from contact number which is check
NSMutableString *newCheckingPhoneNumberStr = [[NSMutableString alloc] init];
int j = [checkingPhoneNumber length];
for (int i=0; i<j; i++)
{
    if ([checkingPhoneNumber characterAtIndex:i] >=48 && [[profileDetailsDict valueForKey:@"mobile"] characterAtIndex:i] <=59)
    {
        [newCheckingPhoneNumberStr appendFormat:@"%c",[checkingPhoneNumber characterAtIndex:i]];
    }
}

for (NSString *contact in phoneArray)
{
    if ([contact isEqual:newCheckingPhoneNumberStr])
    {
        identicalStringFound = YES;
        break;
    }
}
if(identicalStringFound)
{
    // checkingPhoneNumber is exit 
}
else
{
    // checkingPhoneNumber is not exit 
 }

答案 4 :(得分:0)

如果有人要检查姓名是否保存在通讯簿中,则以下功能可能会有用:

-(BOOL)isNameSaved:(NSString*)strGivenName {
    BOOL isSaved = NO;
    ABAddressBookRef addressBook = ABAddressBookCreate();
    CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
    CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);
    for ( int i = 0; i < nPeople; i++ ) {
        ABRecordRef ref = CFArrayGetValueAtIndex(allPeople, i);
        CFStringRef firstc = (CFStringRef)ABRecordCopyValue(ref, kABPersonFirstNameProperty);
        NSString *first = [NSString stringWithFormat:@"%@",firstc];
        if ([first isEqualToString:strGivenName]) {
            isSaved = YES;
            break;
        }
    }
    return isSaved;
}