Хранение локатора записей в поле kABPersonInstantMessageProperty адресной книги пользователя - PullRequest
0 голосов
/ 21 сентября 2010

У меня есть приложение, которое использует адресную книгу пользователя для контактов.У меня также есть другая информация, которую я хочу хранить для каждого пользователя (для каждой записи в адресной книге).Я разрешаю пользователю импортировать одного пользователя, группу адресной книги или все их контакты.Поскольку я хочу продолжать разрешать сторонним приложениям изменять адресную книгу пользователей, я не импортирую всю информацию.Вместо этого я решил изменить запись адресной книги для каждого импортированного пользователя, добавив ключ kABPersonInstantMessageProperty.Я хочу заполнить этот ключ с MyAppsRecordLocaterNumber@MyAppsDomain.com в качестве имени пользователя.Я полагал, что конечный пользователь сразу увидит, что и a: ненавязчиво, и b: ссылка на информацию моего приложения (перехват внешней контактной информации внутренней информацией, которую мое приложение добавляет и хранит).Единственная проблема?Я понятия не имею, как добавить запись к ключу kABPersonInstantMessageProperty.Я выяснил, как добавить многозначные записи, такие как «Домашний адрес», но при поиске переполнения стека я придумываю 4 (ТОЛЬКО ЧЕТЫРЕ!) Записи на вопросы, касающиеся этого ключа (kABPersonInstantMessageProperty).

Ниже приведен фрагмент моего кода для добавления "Домашнего адреса" в запись адресной книги человека, и я признаю, что не знаю, как изменить это значение на kABPersonInstantMessageProperty.

 ABMutableMultiValueRef address = ABMultiValueCreateMutable(kABMultiDictionaryPropertyType);  
 NSMutableDictionary *addressDict = [[NSMutableDictionary alloc] init];

 NSMutableString *street = [NSMutableString stringWithFormat:@"%i",i];
 [street appendString:@" Main Street"];

 [addressDict setObject:[NSString stringWithString:street] forKey:(NSString *)kABPersonAddressStreetKey];       
 [addressDict setObject:@"San Jose" forKey:(NSString *)kABPersonAddressCityKey]; 
 [addressDict setObject:@"CA" forKey:(NSString *)kABPersonAddressStateKey]; 

 NSMutableString *zip = [NSMutableString stringWithString:@"95"];
 [zip appendString:[NSString stringWithFormat:@"%00i",i]];

 [addressDict setObject:zip forKey:(NSString *)kABPersonAddressZIPKey];      
 ABMultiValueAddValueAndLabel(address, addressDict, kABHomeLabel, NULL);
 ABRecordSetValue(record, kABPersonAddressProperty, address, NULL); 

 // add the record
 ABAddressBookAddRecord(addressBook, record, NULL);

Может кто-нибудь помочь?Буду премного благодарен.

1 Ответ

3 голосов
/ 22 сентября 2010

ПОЛУЧИЛ ЭТО!

Это так просто! Благодаря тексту ссылки , у которого возникла та же проблема с отсутствием ответов на этот вопрос в Google. Спасибо, Кейси!

Принимая во внимание, что record - это запись ABPerson, а все ABCreate уже выполнено, а i - целое число локатора последовательной записи ...

        ABMutableMultiValueRef im = ABMultiValueCreateMutable(kABMultiDictionaryPropertyType);
        NSMutableDictionary *imDict = [[NSMutableDictionary alloc] init];
        [imDict setObject:@"MyAppName"  forKey:(NSString*)kABPersonInstantMessageServiceKey];

        NSMutableString *iMID = [NSMutableString stringWithFormat:@"%i",i];
        [iMID appendString:@"RL@MyAppDomain"];

        [imDict setObject:iMID forKey:(NSString*)kABPersonInstantMessageUsernameKey];
        ABMultiValueAddValueAndLabel(im, imDict, kABHomeLabel, NULL);
        [imDict release];
        ABRecordSetValue(record, kABPersonInstantMessageProperty, im, NULL);
...