使用GTMABAddressBook将联系人详细信息保存到现有联系人
问题描述:
使用Google Toolbox for Mac我试图在ABPeoplePickerNavigationController
中选择它时将联系人详细信息添加到我的iPhone上的现有联系人。我通过逐步调试程序中的过程来确认没有错误报告,但细节未显示在“通讯录”应用程序中。使用GTMABAddressBook将联系人详细信息保存到现有联系人
- (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:(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];
// [[GTMABAddressBook addressBook] addRecord:person]; This line doesn't help either
[[GTMABAddressBook addressBook] save];
[self.navigationController dismissModalViewControllerAnimated:YES];
return NO;
}
任何想法我可能做错了什么?
答
终于明白了:+addressBook
没有返回一个singleton,而是返回一个新实例化的GTMABAddressBook实例。我不得不简单地使用相同的实例来实际保存更改。
- (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;
}
我认为它的MacOS不适用于iOS(iPhone)。 – Ravin 2011-04-14 06:57:00
适用于Mac和iOS。我现在只想在iOS上使用它。 – 2011-04-14 07:19:01