Невозможно сделать телефонный звонок, написать кому-либо по электронной почте и т. Д. С помощью платформы адресной книги iOS - PullRequest
0 голосов
/ 10 декабря 2011

В моем приложении реализована структура адресной книги, я создаю новый контакт, устанавливаю в нем некоторую информацию, а затем отображаю ее позже. Но когда я на самом деле отображаю представление, я не могу открыть приложение телефона или приложение электронной почты, когда я нажимаю соответствующие кнопки. Вот как я создаю и сохраняю информацию:

ABRecordRef record = ABPersonCreate();   

ABMutableMultiValueRef phoneMulti = ABMultiValueCreateMutable(kABMultiStringPropertyType);
ABMutableMultiValueRef address = ABMultiValueCreateMutable(kABDictionaryPropertyType);
ABMutableMultiValueRef emailMultiValue = ABMultiValueCreateMutable(kABPersonEmailProperty);
ABMultiValueAddValueAndLabel(emailMultiValue, @"someone_somewhere@abc.com", (CFStringRef)@"email", NULL);

CFStringRef keys[5];
CFStringRef values[5];
keys[0] = kABPersonAddressStreetKey;
keys[1] = kABPersonAddressCityKey;
keys[2] = kABPersonAddressStateKey;
keys[3] = kABPersonAddressZIPKey;
keys[4] = kABPersonAddressCountryKey;

values[0] = CFSTR("ABC way"); 
values[1] = CFSTR("Toronto");       
values[2] = CFSTR("ON");                
values[3] = CFSTR("L1A2B3");            
values[4] = CFSTR("Canada");            //This is static
CFDictionaryRef aDict = CFDictionaryCreate(
                                           kCFAllocatorDefault,
                                           (void *)keys,
                                           (void *)values,
                                           5,
                                           &kCFCopyStringDictionaryKeyCallBacks,
                                           &kCFTypeDictionaryValueCallBacks
                                           );


ABMultiValueAddValueAndLabel(address, aDict, kABHomeLabel, NULL);
CFRelease(aDict);

// Set up Phone Number
ABMultiValueAddValueAndLabel(phoneMulti, @"12345678910", kABWorkLabel, NULL);


ABRecordSetValue(record, kABPersonFirstNameProperty, firstName, NULL);
ABRecordSetValue(record, kABPersonLastNameProperty, lastName, NULL);
ABRecordSetValue(record, kABPersonNoteProperty, (CFStringRef)@" ", NULL);
ABRecordSetValue(record, kABPersonAddressProperty, address, NULL);
ABRecordSetValue(record, kABPersonEmailProperty, emailMultiValue, NULL);
ABRecordSetValue(record, kABPersonPhoneProperty, phoneMulti, nil);

Я использую UnknownPersonViewController для доступа к записи в другом представлении.

ABUnknownPersonViewController *contactDetailsView = [[ABUnknownPersonViewController alloc]init];

contactDetailsView.allowsActions = YES;
contactDetailsView.displayedPerson = record;

[[self navigationController] pushViewController:contactDetailsView animated:YES];

Почему я не могу ничего сделать (позвонить, написать по электронной почте, написать заметку), когда я в моем contactDetailsView? Как я могу это исправить? Я использую iOS 5.

1 Ответ

0 голосов
/ 22 июня 2012

Набор

contactDetailsView.unknownPersonViewDelegate = self;

Затем реализовать

- (BOOL)unknownPersonViewController:(ABUnknownPersonViewController *)personViewController shouldPerformDefaultActionForPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
{
    return YES;
}

И, конечно, файл .h должен иметь:

MyClass : <ABUnknownPersonViewControllerDelegate>

Обязательно проверьте поведение на устройстве, а не на симуляторе

...