在NSMutableArray中存储联系人列表

时间:2012-05-07 06:58:55

标签: ios contacts import-contacts

我正在使用此代码获取联系人列表,然后我想将联系人列表存储到一个数组中,如果我知道如何添加所有名字,那么我只需要第一个名称,然后我将继续其他属性也。

- (void)viewDidLoad {
    // Implement viewDidLoad if you need to do additional setup after loading the view.
    [super viewDidLoad];

    ABAddressBookRef addressBook = ABAddressBookCreate(); // create address book reference object
    NSArray *abContactArray = (NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook); // get address book contact array

    NSInteger totalContacts =[abContactArray count];

    for(NSUInteger loop= 0 ; loop < totalContacts; loop++)
    {
        ABRecordRef record = (ABRecordRef)[abContactArray objectAtIndex:loop]; // get address book record
        // NSLog(@"%@,%@,%@",recordIdString,firstNameString,lastNameString);

        [myarray addObject:firstNameString];
        NSLog(@"%@",[myarray objectAtIndex:1]);

        if(ABRecordGetRecordType(record) ==  kABPersonType) // this check execute if it is person group
        {
            ABRecordID recordId = ABRecordGetRecordID(record); // get record id from address book record

            recordIdString = [NSString stringWithFormat:@"%d",recordId]; // get record id string from record id

            firstNameString = (NSString*)ABRecordCopyValue(record,kABPersonFirstNameProperty); // fetch contact first name from address book  
            lastNameString = (NSString*)ABRecordCopyValue(record,kABPersonLastNameProperty); // fetch contact last name from address book
            //NSLog(@"%@,%@,%@",recordIdString,firstNameString,lastNameString);
        }
    }
}

myarray是.h类中创建的NSMutableArray *myarray对象。

任何帮助将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:3)

试试这个:

ABAddressBookRef addressBook = ABAddressBookCreate();
NSArray *arrayOfPeople = (__bridge_transfer NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);    

//The array in which the first names will be stored as NSStrings
NSMutableArray *firstNames = [[NSMutableArray alloc] init];

for(NSUInteger index = 0; index <= ([arrayOfPeople count]-1); index++){

    ABRecordRef currentPerson = (__bridge ABRecordRef)[arrayOfPeople objectAtIndex:index];    
    NSString *currentFirstName = (__bridge_transfer NSString *)ABRecordCopyValue(currentPerson, kABPersonFirstNameProperty);
    [firstNames addObject: currentFirstName];
}

//OPTIONAL: The following line sorts the first names alphabetically
NSArray *sortedFirstNames = [firstNames sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

我测试了这个并且它有效。如果您对代码有任何问题,请添加评论,我会尽力帮助。

答案 1 :(得分:0)

只是猜测你的问题是什么:将你的代码改为:

- (void)viewDidLoad {
    // Implement viewDidLoad if you need to do additional setup after loading the view.
    [super viewDidLoad];

    ABAddressBookRef addressBook = ABAddressBookCreate(); // create address book reference object
    NSArray *abContactArray = (NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook); // get address book contact array

    NSInteger totalContacts =[abContactArray count];

    for(NSUInteger loop= 0 ; loop < totalContacts; loop++)
    {
        ABRecordRef record = (ABRecordRef)[abContactArray objectAtIndex:loop]; // get address book record

        if(ABRecordGetRecordType(record) ==  kABPersonType) // this check execute if it is person group
        {
            ABRecordID recordId = ABRecordGetRecordID(record); // get record id from address book record

            recordIdString = [NSString stringWithFormat:@"%d",recordId]; // get record id string from record id

            firstNameString = (NSString*)ABRecordCopyValue(record,kABPersonFirstNameProperty); // fetch contact first name from address book  
            lastNameString = (NSString*)ABRecordCopyValue(record,kABPersonLastNameProperty); // fetch contact last name from address book
            //NSLog(@"%@,%@,%@",recordIdString,firstNameString,lastNameString);

            // changes took place here!
            [myarray addObject:firstNameString]; 
            NSLog(@"%@",[myarray objectAtIndex:loop]);
        }
    }
}