您的位置:首页 > Web前端

iPhone Programming: Adding a Contact to the iPhone Address Book

2012-10-16 17:28 302 查看
--------Tom Gersic 的文章。网上转载

链接:http://www.modelmetrics.com/tomgersic/iphone-programming-adding-a-contact-to-the-iphone-address-book/

点击打开链接
http://blog.csdn.net/a21064346/article/details/8078141
Adding a contact to the iPhone’s address book isn’t horribly complicated, but it’s not the most straightforward process in the world, either, because the documentation leaves a bit to be desired. There is an Address
Book Programming Guide published by Apple, but at 28 pages, it feels a bit bloated when you’re just trying to quickly figure out a simple process like this, and somewhat ironically, the “Creating a New Person” section is less than a page, and doesn’t go
into much detail. The XCode documentation is helpful, but it still takes some effort to put all the pieces together, so this is basically just a walk-through of the process of creating a new contact, and adding some common fields to it.

To create a new record, we start out by creating a CFErrorRef variable that will hold any errors that get generated throughout the rest of the process. In my experience, most errors here tend to generate exceptions anyway, but there’s an error parameter, so
we may as well use it. Anyway, here’s the line:

   
    CFErrorRef error = NULL; 

We then create our reference to the iPhone Address Book with a call to ABAddressBookCreate():

   
    ABAddressBookRef iPhoneAddressBook = ABAddressBookCreate();

And then we create a new person record:

   
    ABRecordRef newPerson = ABPersonCreate();

At this point, we haven’t saved anything to the address book yet, but we can start adding data to the person record. To do this, we use ABRecordSetValue, but some fields need to be formatted differently from others. For some, like first name and last name,
we can just pass in a string:

   
    ABRecordSetValue(newPerson, kABPersonFirstNameProperty, @”John”, &error);

ABRecordSetValue(newPerson, kABPersonLastNameProperty, @”Doe”, &error);

kABPersonFirstNameProperty and kABPersonLastNameProperty are
constants defined by Apple that specify which fields you’re saving. They’re listed in the XCode documentation under Personal Information Properties in the ABPerson Reference document. We can also set some other fields in this manner, such as company and title:

   
    ABRecordSetValue(newPerson, kABPersonOrganizationProperty, @”Model Metrics”, &error);

ABRecordSetValue(newPerson, kABPersonJobTitleProperty, @”Senior Slacker”, &error);

Where it gets a bit trickier is when we want to set our phone, email, or address properties, because these fields use ABMutableMultiValueRef rather
than strings to store the data, and the specific data types of the values vary a bit depending on which one we’re talking about. For phone, we would do something like this:
  
     ABMutableMultiValueRef multiPhone = ABMultiValueCreateMutable(kABMultiStringPropertyType);

ABMultiValueAddValueAndLabel(multiPhone, @”1-555-555-5555″, kABPersonPhoneMainLabel, NULL);

ABMultiValueAddValueAndLabel(multiPhone, @”1-123-456-7890″, kABPersonPhoneMobileLabel, NULL);

ABMultiValueAddValueAndLabel(multiPhone, @”1-987-654-3210″, kABOtherLabel, NULL);

ABRecordSetValue(newPerson, kABPersonPhoneProperty, multiPhone,nil);

CFRelease(multiPhone);

The first two phone types (kABPersonPhoneMainLabel and kABPersonPhoneMobileLabel)
are listed as Phone Number Properties in the ABPerson Reference, along with kABPersonPhoneHomeFAXLabel,kABPersonPhoneWorkFAXLabel,
and kABPersonPhonePagerLabel.
Despite the fact that the two fax numbers and the pager number seem fairly useless (you can’t send a fax from your phone, and who has a pager anymore?) but there’s nothing listed there for Other, or Work Phone or anything like that. That’s where the Generic
Property labels come into play:

 
    kABWorkLabel;

kABHomeLabel;

kABOtherLabel;

Those will file the phone numbers as Work, Home, and Other, respectively. After adding the values to theABMutableMultiValueRef,
we need to call ABRecordSetValue,
only this time instead of passing a string in for the third parameter, we pass in multiPhone. Then be sure to free up the memory with CFRelease.

Adding email addresses to the record is pretty similar to adding phone numbers, where we create anABMutableMultiValueRef of
strings:

   
    ABMutableMultiValueRef multiEmail = ABMultiValueCreateMutable(kABMultiStringPropertyType);

ABMultiValueAddValueAndLabel(multiEmail, @”johndoe@modelmetrics.com”, kABWorkLabel, NULL);

ABRecordSetValue(newPerson, kABPersonEmailProperty, multiEmail, &error);

CFRelease(multiEmail);

Where it gets a little different is when we go to set the street address values. While we do still use anABMutableMultiValueRef,
we won’t be using kABMultiStringPropertyType.
To set the street address, we usekABMultiDictionaryPropertyType instead,
so we have to create an NSMutableDictionary,
and the method calls end up being a bit different:

   
    ABMutableMultiValueRef multiAddress = ABMultiValueCreateMutable(kABMultiDictionaryPropertyType);

NSMutableDictionary *addressDictionary = [[NSMutableDictionary alloc] init];

            [addressDictionary
setObject:@"750 North Orleans Street, Ste 601" forKey:(NSString *) kABPersonAddressStreetKey];

[addressDictionary setObject:@"Chicago" forKey:(NSString *)kABPersonAddressCityKey];

[addressDictionary setObject:@"IL" forKey:(NSString *)kABPersonAddressStateKey];

[addressDictionary setObject:@"60654" forKey:(NSString *)kABPersonAddressZIPKey];

 
        ABMultiValueAddValueAndLabel(multiAddress, addressDictionary, kABWorkLabel, NULL);

ABRecordSetValue(newPerson, kABPersonAddressProperty, multiAddress,&error);

CFRelease(multiAddress);

kABWorkLabel means that we’re setting this as the contact’s work address. And to add it to the contact record, we call ABRecordSetValue as
before, releasing the memory afterward.

The last step is to add the new record to the address book, and save it back to the device:

   
    ABAddressBookAddRecord(iPhoneAddressBook, newPerson, &error);

ABAddressBookSave(iPhoneAddressBook, &error);

And then we can check for any errors:

   
    if (error != NULL)

{

                 
NSLog(@”Danger Will Robinson! Danger!”);

       
}

 

So that concludes this introduction to creating new records in the address book.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐