Генерируйте vCard от AddressBook.framework

Я использую AddressBook.framework в своем приложении для iPhone, и я хотел бы копировать что-то вроде функции доли в Contacts.app. Это в основном присоединение определенные контакты vCard на электронное письмо. Насколько я знаю, нет ничего в документации, которая упоминает, что генерировала vCard.

Действительно ли это - случай генерации той самостоятельно? Или есть ли что-то доступное, которое может помочь мне?

14
задан JOM 18 December 2012 в 05:21
поделиться

2 ответа

Полностью согласен с ответом Дейва ДеЛонга. Хочу добавить, что поскольку я просто хотел создать файл vCard (.vcf) и прикрепить его к действию электронной почты в приложении, я создал строку, а затем временный файл со всеми полями vCard, для которых у меня были данные.

В моем случае я сделал метод в подклассе NSManagedObject, чтобы вернуть строку -vCardRepresentation.

Категория Objective-c или простой фреймворк были бы большой помощью - я мог бы сделать это, когда будет время.

Страница Wikipedia и формальная спецификация для vCard (3.0) действительно помогают.

ОБНОВЛЕНИЕ 3: Если вы используете iOS 5 или более позднюю версию, в ABPerson появилась функция, которая может вернуть vCard-представление заданных записей о человеке:

CFDataRef ABPersonCreateVCardRepresentationWithPeople(CFArrayRef people);

UPDATE 2: Я спешу закончить приложение, но поскольку я хотел создать данные vCard и добавить их как вложения в почтовые сообщения в приложении в нескольких местах, я теперь сделал отдельный класс-контроллер, который делает / скрывает детали синтаксиса vCard. Затем у меня просто есть метод, который возвращает NSData версию строки vCard для добавления непосредственно в почтовое сообщение в качестве вложения. Это гораздо более чистое решение, вам не нужно создавать никаких файлов, даже если они только временные. Кроме того, вам все равно не нужно представление данных в виде NSString, если только вы не хотите создать файл и использовать его несколько раз, чтобы сохранить повторное создание данных?

Мой класс контроллера имеет ряд методов -setXXXX, которые добавляют значения в словарь, где ключами являются строки с именами полей vCard, например FN, TEL и ADR. Затем, когда я вызываю его -vCardRepresentation, он возвращает объект NSData (созданный путем сканирования словаря), который можно использовать непосредственно в методе -addAttachmentData:mimeType:fileName: MFMailComposeViewController.

Если я смогу привести свой код в порядок, чтобы он был достаточно общим, я выложу его позже.

UPDATE: Вот мой код, он может помочь кому-нибудь начать:

- (NSString *)vCardRepresentation
{
  NSMutableArray *mutableArray = [[NSMutableArray alloc] init];

  [mutableArray addObject:@"BEGIN:VCARD"];
  [mutableArray addObject:@"VERSION:3.0"];

  [mutableArray addObject:[NSString stringWithFormat:@"FN:%@", self.name]];

  [mutableArray addObject:[NSString stringWithFormat:@"ADR:;;%@",
                           [self addressWithSeparator:@";"]]];

  if (self.phone != nil)
    [mutableArray addObject:[NSString stringWithFormat:@"TEL:%@", self.phone]];

  [mutableArray addObject:[NSString stringWithFormat:@"GEO:%g;%g",
                           self.latitudeValue, self.longitudeValue]];

  [mutableArray addObject:[NSString stringWithFormat:@"URL:http://%@",
                           self.website]];

  [mutableArray addObject:@"END:VCARD"];

  NSString *string = [mutableArray componentsJoinedByString:@"\n"];

  [mutableArray release];

  return string;
}

Очевидно, что я ссылаюсь на свойства моего класса, плюс метод под названием -addressWithSeparator для создания данных для адреса, который должен включать разделитель ; даже для необязательных полей адреса.

19
ответ дан 1 December 2019 в 09:01
поделиться

Похоже, что для этого нет общедоступного кода. Версия AddressBook.framework для Mac имеет ABPersonCopyVCardRepresentation () , но на iPhone нет эквивалента.

Вероятно, лучше всего было бы взять существующий синтаксический анализатор / построитель (например, PEAR построитель и синтаксический анализатор ) и преобразовать их в Objective-C.

Другой вариант - написать собственный конструктор. Грамматика для визиток не сложная.

6
ответ дан 1 December 2019 в 09:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: