Как использовать ABUnknownPersonViewController с изначально сгенерированными данными? - PullRequest
1 голос
/ 15 апреля 2011

Это очень специфический случай. Я полагаю, что кто-то уже где-то решил это, но мне нелегко найти это.

Ситуация:

1) объект вернет NSString объектов для имени адрес1, адрес2, телефон:

[anObject name];
[anObject address1];
[anObject address2];
[anObject name];

2) Я хотел бы использовать эти объекты для подготовки ABUnknownPersonViewController с первоначально введенными значениями, чтобы пользователю не приходилось вводить их перед сохранением в адресной книге.

Я просмотрел документы iOS и провел поиск в Google и StackOverflow, не могу найти правильный ответ для этой простой ситуации.

Может кто-нибудь наставить меня в этом?

1 Ответ

2 голосов
/ 26 апреля 2011

Нашел ответ: Это хорошо задокументировано в iOS Developer Library: http://developer.apple.com/library/ios/#samplecode/QuickContacts/Listings/Classes_QuickContactsViewController_m.html#//apple_ref/doc/uid/DTS40009475-Classes_QuickContactsViewController_m-DontLinkElementID_6

Вот пример кода, который я реализовал, чтобы вернуть ABPersonRecordRef как объект. Ошибка, с которой я столкнулся, была связана с невозможностью сохранить объект ABPersonRecordRef после его возвращения.

- (id)personRecordUsingModelObj:(id)modelObj {
    ABRecordRef aContact = ABPersonCreate();
    CFErrorRef anError = NULL;

    NSString *name = [NSString stringWithFormat:@"%@", [modelObj name]];
    ABRecordSetValue(aContact, kABPersonOrganizationProperty, name, &anError);  

    ABMultiValueRef phone = ABMultiValueCreateMutable(kABMultiStringPropertyType);
    ABMultiValueAddValueAndLabel(phone, [modelObj phone], kABPersonPhoneMainLabel, NULL);

    ABRecordSetValue(aContact, kABPersonPhoneProperty, phone, &anError);
    CFRelease(phone);

    NSString *address = [NSString stringWithFormat:@"%@ %@", [modelObj addr1], [modelObj addr2]];
    NSMutableDictionary *dictionaryAddress = [[NSMutableDictionary alloc] initWithCapacity:0];
    [dictionaryAddress setObject:address forKey:(NSString *)kABPersonAddressStreetKey];
    [dictionaryAddress setObject:@"us" forKey:(NSString *)kABPersonAddressCountryCodeKey];

    ABMutableMultiValueRef address = ABMultiValueCreateMutable(kABDictionaryPropertyType);
    ABMultiValueAddValueAndLabel(address, dictionaryAddress, kABPersonAddressStreetKey, NULL);
    [dictionaryAddress release];

    ABRecordSetValue(aContact, kABPersonAddressProperty, address, &anError);
    CFRelease(address); 

    if (anError) {
        aContact = nil;
    }

    [(id)aContact autorelease];

    return (id)aContact;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...