Сохранение контактной информации в существующий контакт с помощью GTMABAddressBook - PullRequest
0 голосов
/ 14 апреля 2011

Использование Google Toolbox для Mac Я пытаюсь добавить контактную информацию к существующему контакту на моем iPhone, выбрав его в ABPeoplePickerNavigationController. 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 голосов
/ 21 апреля 2011

Наконец-то понял: +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;
}
...