使用GTMABAddressBook将联系人详细信息保存到现有联系人

时间:2011-04-14 06:45:48

标签: iphone cocoa-touch addressbook

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

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

1 个答案:

答案 0 :(得分:0)

最后想通了:+addressBook不返回单例,而是返回一个新实例化的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;
}
相关问题