Saving contact details to existing contact using GTMABAddressBook
Using Google Toolbox for Mac I am trying to add contact details to an existing contact on my iPhone upon selecting it in a ABPeoplePickerNavigationController
. No errors are reported by GTMABAddressBook
as I confirmed by stepping through the process in the debugger, yet the details don't show up in the Contacts app.
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)personRef {
GTMABPerson *record = [GTMABPerson recordWithRecord:personRef];
GTMABPerson *person = [[GTMABAddressBook addressBook] personForId:[record recordID]];
GTMABMutableMultiValue *addresses = [[[person valueForProperty:kABPersonAddressProperty] mutableCopy] autorelease];
if (!addresses) {
addresses = [GTMABMutableMultiValue valueWithPropertyType:kABMultiDictionaryPropertyType];
}
NSMutableDictionary *address = [NSMutableDictionary dictionary];
[address setObject:@"Street" forKey:(NSStrin开发者_如何学编程g *)kABPersonAddressStreetKey];
[address setObject:@"City" forKey:(NSString *)kABPersonAddressCityKey];
[address setObject:@"Country" forKey:(NSString *)kABPersonAddressCountryKey];
[addresses addValue:address withLabel:(CFStringRef)@"Label"];
[person setValue:addresses forProperty:kABPersonAddressProperty];
// [[GTMABAddressBook addressBook] addRecord:person]; This line doesn't help either
[[GTMABAddressBook addressBook] save];
[self.navigationController dismissModalViewControllerAnimated:YES];
return NO;
}
Any ideas what I may be doing wrong?
Finally figured it out: +addressBook
does not return a singleton, but instead returns a newly instantiated GTMABAddressBook instance. I had to simply use the same instance to actually save the changes.
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)personRef {
GTMABPerson *record = [GTMABPerson recordWithRecord:personRef];
GTMABAddressBook *addressBook = [GTMABAddressBook addressBook];
GTMABPerson *person = [addressBook personForId:[record recordID]];
GTMABMutableMultiValue *addresses = [[[person valueForProperty:kABPersonAddressProperty] mutableCopy] autorelease];
if (!addresses) {
addresses = [GTMABMutableMultiValue valueWithPropertyType:kABMultiDictionaryPropertyType];
}
NSMutableDictionary *address = [NSMutableDictionary dictionary];
[address setObject:@"Street" forKey:(NSString *)kABPersonAddressStreetKey];
[address setObject:@"City" forKey:(NSString *)kABPersonAddressCityKey];
[address setObject:@"Country" forKey:(NSString *)kABPersonAddressCountryKey];
[addresses addValue:address withLabel:(CFStringRef)@"Label"];
[person setValue:addresses forProperty:kABPersonAddressProperty];
[addressBook save];
[self.navigationController dismissModalViewControllerAnimated:YES];
return NO;
}
精彩评论