Полностью согласен с ответом Дейва ДеЛонга. Просто хочу добавить это, так как я просто хотел создать файл 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
для наращивания данных для адрес, который должен включать; разделитель даже для дополнительных полей адреса.
См. Также: http://stackoverflow.com/questions/1552325 Этот вопрос, к сожалению, не имеет принятого ответа. –