iPhoneで連絡先に追加

2009.07.29 16:10 | iPhone, AddressBook

よーやく理解できたー
結構簡単に連絡先追加できるのね。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];
}

この記事へのコメント

コメントはありません

タグ一覧