我在我的iPhone應用程序中使用AddressBook.framework,並且想要在Contacts.app中沿着共享功能的行復制某些內容。這基本上附加了一個特定的聯繫人電子名片到電子郵件。據我所知,在文檔中沒有提到生成電子名片。從AddressBook.framework生成電子名片
這是自己生成一個案例嗎?或者有什麼可以幫助我嗎?
我在我的iPhone應用程序中使用AddressBook.framework,並且想要在Contacts.app中沿着共享功能的行復制某些內容。這基本上附加了一個特定的聯繫人電子名片到電子郵件。據我所知,在文檔中沒有提到生成電子名片。從AddressBook.framework生成電子名片
這是自己生成一個案例嗎?或者有什麼可以幫助我嗎?
完全同意Dave DeLong的回答。只是想補充一點,因爲我只是想創建一個vCard文件(.vcf)並將其附加到應用內電子郵件操作中,我所做的是創建一個字符串,然後是一個臨時文件,包含所有vCard字段, 。
在我的情況下,我在我的NSManagedObject
子類中做了一個方法,返回一個-vCardRepresentation
字符串。
一個Objective-c類或簡單的框架將是一個很大的幫助 - 我可能會做的時候。
Wikipedia頁面和vCard(3.0)的正式規範確實有幫助。
更新3:如果你使用的是iOS 5或更高版本現在有在ABPerson
功能,可以返回的特定的人記錄的電子名片表示:
CFDataRef ABPersonCreateVCardRepresentationWithPeople(CFArrayRef people);
更新2:我爲了獲得一個完整的應用程序,但因爲我確實想創建vCard數據並將它作爲附件添加到多個地方的應用內郵件中,所以我現在已經創建了一個單獨的類控制器,它可以創建/隱藏vCard語法的詳細信息。然後我只是有一個方法返回一個NSData版本的vCard字符串,作爲附件直接添加到郵件消息中。這是一個更清潔的解決方案,即使它們只是臨時的,也不需要創建任何文件。另外,你不需要NSString表示數據,除非你想創建一個文件並多次使用它來保存重新生成的數據嗎?
我的控制器類有多個-setXXXX
方法,它們將值添加到字典中的密鑰是帶有vCard字段名稱的字符串,如FN,TEL和ADR。然後,當我調用它的-vCardRepresentation
時,它現在會返回一個NSData對象(通過掃描字典構建),該對象可以直接在MFMailComposeViewController的方法-addAttachmentData:mimeType:fileName:中使用。
如果我可以整理我的代碼,那麼它足夠通用,我會稍後發佈。
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
的方法來積聚的數據地址,其中必須包括;即使對於可選地址字段也是如此
謝謝!看起來像一個真棒的開始。 – Oliver 2010-06-08 17:50:55
尚未完全測試,但在導入vCard文件時,看起來GEO字段未在Mac的AddressBook應用中使用?它在AddressBook的註釋字段中添加了如下內容:「GEO:51.34i8rtt」。 – petert 2010-06-09 07:51:47
這是一個很好的幫助。附加NSData時使用了哪種MIME類型?維基百科說:「注意:在某些SyncML文檔中使用了互聯網媒體類型文本/電子名片(不正確)來引用vCard 3.0,並且在各種實現中遵循了該示例。」 – Oliver 2010-06-09 13:03:07
另請參閱:http://stackoverflow.com/questions/1552325不幸的是,這個問題沒有被接受的答案。 – 2010-05-08 21:33:58