2010-05-08 4 views
13

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

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

+2

См. Также: http://stackoverflow.com/questions/1552325 Этот вопрос, к сожалению, не имеет принятого ответа. –

ответ

18

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

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

Целевая категория или простая рамочка будут большой помощью - я могу сделать это, когда время.

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

UPDATE 3: Если вы используете IOS 5 или более поздней версии есть теперь функция ABPerson, которая может вернуть визитку представление данных персональных записей:

CFDataRef ABPersonCreateVCardRepresentationWithPeople(CFArrayRef people); 

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

В моем классе контроллера есть число методов -setXXXX, которые добавляют значения в словарь, где ключи являются строками с именами полей vCard, такими как FN, TEL и ADR. Затем, когда я вызываю его -vCardRepresentation, теперь он возвращает объект NSData (созданный путем сканирования словаря), который может быть использован непосредственно в методе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 для наращивания данных для адрес, который должен включать; разделитель даже для дополнительных полей адреса.

+0

Спасибо тонну! Похоже на удивительный старт. – Oliver

+0

Не протестировали это полностью, но похоже, что поле GEO не используется в приложении адресной книги Mac при импорте файла vCard? В поле примечания в адресной книге добавлено следующее: «GEO: 51.34i8rtt». – petert

+1

Это отличная помощь. Какой тип MIME вы использовали при подключении NSData? Википедия говорит: «Примечание: текст или vcard-тип интернет-медиа использовался (некорректно) в некоторых документах SyncML для ссылки на vCard 3.0, и пример использовался в различных реализациях». – Oliver

5

Для этого не нужно публиковать размещенный код. Версия Mac AddressBook.framework имеет номер ABPersonCopyVCardRepresentation(), но на iPhone нет эквивалента.

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

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

5

Here вы можете скачать код, который генерирует визитную карточку.

+0

Просьба представить пример приложения с использованием этого кода. Заранее спасибо. – 2014-01-06 11:39:28

Смежные вопросы