使用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; 
} 

任何想法我可能做错了什么?

+0

我认为它的MacOS不适用于iOS(iPhone)。 – Ravin 2011-04-14 06:57:00

+0

适用于Mac和iOS。我现在只想在iOS上使用它。 – 2011-04-14 07:19:01

终于明白了:+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; 
}