よーやく理解できたー
結構簡単に連絡先追加できるのね。UIも用意してくれてるみたいだし。
うん、こりゃ便利。
--- AddBookViewController.h ---
#import <AddressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>
@interface AddBookViewController : UIViewController <ABNewPersonViewControllerDelegate> {
}
@end
--- AddBookViewController.m ---
#import "AddBookViewController.h"
@implementation AddBookViewController
- (void)viewDidLoad {
UIButton *addBookButton = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];
[addBookButton setFrame:CGRectMake(10, 10, 300, 30)];
[addBookButton setTitle:@"AddBook" forState:UIControlStateNormal];
[addBookButton.titleLabel setFont:[UIFont systemFontOfSize:14.0]];
[addBookButton addTarget:self action:@selector(addBookButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:addBookButton];
[addBookButton release];
}
- (void)addBookButtonClicked:(UIButton *)sender {
NSString *lastName = @"Last";
NSString *firstName = @"First";
NSString *telNum = @"03-0000-0000";
NSString *url = @"http://blog.rakugaki.jp";
NSString *addressPostal = @"100-0000";
NSString *addressPref = @"Tokyo";
NSString *addressCity = @"Machida";
NSString *addressStreet = @"1-1-1-1";
UIImage *faceImage = [UIImage imageNamed:@"icon.png"];
// create view controller
ABNewPersonViewController *viewController = [[ABNewPersonViewController alloc] initWithNibName:nil bundle:nil];
ABRecordRef newBook = ABPersonCreate();
CFErrorRef error;
// name
ABRecordSetValue(newBook, kABPersonLastNameProperty, (CFStringRef)lastName, &error);
ABRecordSetValue(newBook, kABPersonFirstNameProperty, (CFStringRef)firstName, &error);
// phone
ABMutableMultiValueRef multiPhone = ABMultiValueCreateMutable(kABMultiStringPropertyType);
ABMultiValueAddValueAndLabel(multiPhone, telNum, kABPersonPhoneMainLabel, NULL);
ABRecordSetValue(newBook, kABPersonPhoneProperty, multiPhone, &error);
CFRelease(multiPhone);
// url
ABMutableMultiValueRef multiUrl = ABMultiValueCreateMutable(kABMultiStringPropertyType);
ABMultiValueAddValueAndLabel(multiUrl, url, kABPersonHomePageLabel, NULL);
ABRecordSetValue(newBook, kABPersonURLProperty, multiUrl, &error);
CFRelease(multiPhone);
// address
ABMutableMultiValueRef multiAddress = ABMultiValueCreateMutable(kABMultiDictionaryPropertyType);
NSMutableDictionary *addressDictionary = [[NSMutableDictionary alloc] init];
[addressDictionary setObject:addressPostal forKey:(NSString *)kABPersonAddressZIPKey];
[addressDictionary setObject:addressPref forKey:(NSString *)kABPersonAddressStateKey];
[addressDictionary setObject:addressCity forKey:(NSString *)kABPersonAddressCityKey];
[addressDictionary setObject:addressStreet forKey:(NSString *)kABPersonAddressStreetKey];
ABMultiValueAddValueAndLabel(multiAddress, addressDictionary, kABOtherLabel, NULL);
ABRecordSetValue(newBook, kABPersonAddressProperty, multiAddress, &error);
CFRelease(multiAddress);
// image
if(faceImage!=nil) {
// resize image
UIGraphicsBeginImageContext(CGSizeMake(60.0,60.0));
[faceImage drawInRect:CGRectMake(0, 0, 60, 60)];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData *imageData = UIImagePNGRepresentation(image);
// add image data
ABPersonSetImageData(newBook, (CFDataRef)imageData, &error);
}
// set new book to view controller
viewController.displayedPerson = newBook;
viewController.newPersonViewDelegate = self;
CFRelease(newBook);
[self.navigationController pushViewController:viewController animated:YES];
[viewController release];
}
# pragma mark --- ABNewPersonViewControllerDelegate methods
- (void)newPersonViewController:(ABNewPersonViewController *)newPersonViewController didCompleteWithNewPerson:(ABRecordRef)person {
// save button action
if(person!=NULL) {
CFErrorRef error;
ABAddressBookRef addressBook = ABAddressBookCreate();
ABAddressBookAddRecord(addressBook, person, &error);
ABAddressBookSave(addressBook, &error);
}
// cancel button action
else {
}
[newPersonViewController.navigationController popViewControllerAnimated:YES];
}