乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      iOS開發(fā)生成/解析.vcf文件vCard解析<div></div>

       最初九月雪 2015-04-16

      一。生成vcf文件

      如果要把我們iPhone通訊錄里的數(shù)據(jù), 生成vcf格式文件。

      我們可以借助iCloud。

      小技巧:通過iCloud導出iPhone通訊錄的方法

      當然, 如果你想在應用中, 利用代碼生成, 完全可以。先導出通訊錄數(shù)據(jù), 再解析, 再生成vcf文件即可。

      參考下面代碼:

      001.-(NSString*)generateVCardStringWithContacts:(CFArrayRef)contacts {
      002.NSInteger counter  = 0;
      003.NSString *vcard = @"";
      004. 
      005.for(CFIndex i = 0; i < CFArrayGetCount(contacts); i++) {
      006. 
      007.ABRecordRef person = CFArrayGetValueAtIndex(contacts, i);
      008. 
      009.NSString *firstName = (NSString*)ABRecordCopyValue(person, kABPersonFirstNameProperty);
      010.firstName = (firstName ? firstName : @"");
      011.NSString *lastName = (NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty);
      012.lastName = (lastName ? lastName : @"");
      013.NSString *middleName = (NSString *)ABRecordCopyValue(person, kABPersonMiddleNameProperty);
      014.NSString *prefix = (NSString *)ABRecordCopyValue(person, kABPersonPrefixProperty);
      015.NSString *suffix = (NSString *)ABRecordCopyValue(person, kABPersonSuffixProperty);
      016.NSString *nickName = (NSString *)ABRecordCopyValue(person, kABPersonNicknameProperty);
      017.NSString *firstNamePhonetic = (NSString *)ABRecordCopyValue(person, kABPersonFirstNamePhoneticProperty);
      018.NSString *lastNamePhonetic = (NSString *)ABRecordCopyValue(person, kABPersonLastNamePhoneticProperty);
      019. 
      020.NSString *organization = (NSString *)ABRecordCopyValue(person, kABPersonOrganizationProperty);
      021.NSString *jobTitle = (NSString *)ABRecordCopyValue(person, kABPersonJobTitleProperty);
      022.NSString *department = (NSString *)ABRecordCopyValue(person, kABPersonDepartmentProperty);
      023. 
      024.NSString *compositeName = [NSString stringWithFormat:@"%@%@",firstName,lastName];
      025. 
      026.if(i > 0) {
      027.vcard = [vcard stringByAppendingFormat:@"\n"];
      028.}
      029. 
      030.vcard = [vcard stringByAppendingFormat:@"BEGIN:VCARD\nVERSION:3.0\nN:%@;%@;%@;%@;%@\n",
      031.(firstName ? firstName : @""),
      032.(lastName ? lastName : @""),
      033.(middleName ? middleName : @""),
      034.(prefix ? prefix : @""),
      035.(suffix ? suffix : @"")
      036.];
      037. 
      038.vcard = [vcard stringByAppendingFormat:@"FN:%@\n",compositeName];
      039.if(nickName) vcard = [vcard stringByAppendingFormat:@"NICKNAME:%@\n",nickName];
      040.if(firstNamePhonetic) vcard = [vcard stringByAppendingFormat:@"X-PHONETIC-FIRST-NAME:%@\n",firstNamePhonetic];
      041.if(lastNamePhonetic) vcard = [vcard stringByAppendingFormat:@"X-PHONETIC-LAST-NAME:%@\n",lastNamePhonetic];
      042. 
      043.// Work
      044.if(organization) vcard = [vcard stringByAppendingFormat:@"ORG:%@;%@\n",(organization?organization:@""),(department?department:@"")];
      045. 
      046.if(jobTitle) vcard = [vcard stringByAppendingFormat:@"TITLE:%@\n",jobTitle];
      047. 
      048.// Mail
      049.ABMultiValueRef emails = ABRecordCopyValue(person, kABPersonEmailProperty);
      050.if(emails) {
      051.for (int k = 0; k < ABMultiValueGetCount(emails); k++) {
      052.NSString *label = (NSString*)ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(emails, k));
      053.NSString *email = (NSString *)ABMultiValueCopyValueAtIndex(emails, k);
      054.NSString *labelLower = [label lowercaseString];
      055. 
      056.vcard = [vcard stringByAppendingFormat:@"EMAIL;type=INTERNET;type=WORK:%@\n",email];
      057. 
      058.if ([labelLower isEqualToString:@"home"]) vcard = [vcard stringByAppendingFormat:@"EMAIL;type=INTERNET;type=HOME:%@\n",email];
      059.else if ([labelLower isEqualToString:@"work"]) vcard = [vcard stringByAppendingFormat:@"EMAIL;type=INTERNET;type=WORK:%@\n",email];
      060.else {//類型解析不出來的
      061.counter++;
      062.vcard = [vcard stringByAppendingFormat:@"item%d.EMAIL;type=INTERNET:%@\nitem%d.X-ABLabel:%@\n",counter,email,counter,label];
      063.}
      064.}
      065.}
      066. 
      067.// Tel
      068.ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);
      069.if(phoneNumbers) {
      070.for (int k = 0; k < ABMultiValueGetCount(phoneNumbers); k++) {
      071.NSString *label = (NSString*)ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(phoneNumbers, k));
      072.NSString *number = (NSString *)ABMultiValueCopyValueAtIndex(phoneNumbers, k);
      073.NSString *labelLower = [label lowercaseString];
      074. 
      075.if ([labelLower isEqualToString:@"mobile"]) vcard = [vcard stringByAppendingFormat:@"TEL;type=CELL:%@\n",number];
      076.else if ([labelLower isEqualToString:@"home"]) vcard = [vcard stringByAppendingFormat:@"TEL;type=HOME:%@\n",number];
      077.else if ([labelLower isEqualToString:@"work"]) vcard = [vcard stringByAppendingFormat:@"TEL;type=WORK:%@\n",number];
      078.else if ([labelLower isEqualToString:@"main"]) vcard = [vcard stringByAppendingFormat:@"TEL;type=MAIN:%@\n",number];
      079.else if ([labelLower isEqualToString:@"homefax"]) vcard = [vcard stringByAppendingFormat:@"TEL;type=HOME;type=FAX:%@\n",number];
      080.else if ([labelLower isEqualToString:@"workfax"]) vcard = [vcard stringByAppendingFormat:@"TEL;type=WORK;type=FAX:%@\n",number];
      081.else if ([labelLower isEqualToString:@"pager"]) vcard = [vcard stringByAppendingFormat:@"TEL;type=PAGER:%@\n",number];
      082.else if([labelLower isEqualToString:@"other"]) vcard = [vcard stringByAppendingFormat:@"TEL;type=OTHER:%@\n",number];
      083.else { //類型解析不出來的
      084.counter++;
      085.vcard = [vcard stringByAppendingFormat:@"item%d.TEL:%@\nitem%d.X-ABLabel:%@\n",counter,number,counter,label];
      086.}
      087.}
      088.}
      089. 
      090.// Address
      091.ABMultiValueRef address = ABRecordCopyValue(person, kABPersonAddressProperty);
      092.if(address) {
      093.for (int k = 0; k < ABMultiValueGetCount(address); k++) {
      094.NSString *label = (NSString*)ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(label, k));
      095.NSDictionary *dic = (NSDictionary *)ABMultiValueCopyLabelAtIndex(address, k);
      096.NSString *labelLower = [label lowercaseString];
      097.NSString* country = [dic valueForKey:(NSString *)kABPersonAddressCountryKey];
      098.NSString* city = [dic valueForKey:(NSString *)kABPersonAddressCityKey];
      099.NSString* state = [dic valueForKey:(NSString *)kABPersonAddressStateKey];
      100.NSString* street = [dic valueForKey:(NSString *)kABPersonAddressStreetKey];
      101.NSString* zip = [dic valueForKey:(NSString *)kABPersonAddressZIPKey];
      102.NSString* countryCode = [dic valueForKey:(NSString *)kABPersonAddressCountryCodeKey];
      103.NSString *type = @"";
      104.NSString *labelField = @"";
      105.counter++;
      106. 
      107.if([labelLower isEqualToString:@"work"]) type = @"WORK";
      108.else if([labelLower isEqualToString:@"home"]) type = @"HOME";
      109.else if(label && [label length] > 0)
      110.{
      111.labelField = [NSString stringWithFormat:@"item%d.X-ABLabel:%@\n",counter,label];
      112.}
      113. 
      114.vcard = [vcard stringByAppendingFormat:@"item%d.ADR;type=%@:;;%@;%@;%@;%@;%@\n%@item%d.X-ABADR:%@\n",
      115.counter,
      116.type,
      117.(street ? street : @""),
      118.(city ? city : @""),
      119.(state ? state : @""),
      120.(zip ? zip : @""),
      121.(country ? country : @""),
      122.labelField,
      123.counter,
      124.(countryCode ? countryCode : @"")
      125.];
      126.}
      127.}
      128. 
      129. 
      130.// 剩下的不常用,我就不寫了,要是需要,自己補全
      131.// url
      132.// TODO:
      133. 
      134.// IM
      135.// TODO:
      136. 
      137.// Photo
      138.// TODO:
      139. 
      140.vcard = [vcard stringByAppendingString:@"END:VCARD"];
      141.}
      142. 
      143.return vcard;
      144.}



      二。解析vcf文件

      用 UIDocumentInteractionController 也就是用QuickLook去顯示這個文件。 那他會自動的解析, 并且有添加到通訊錄選項。


      當然,我們也可以自己來解析。

      具體代碼如下:

      01.//解析vcf
      02.-(void)parseVCardString:(NSString*)vcardString
      03.{
      04.NSArray *lines = [vcardString componentsSeparatedByString:@"\n"];
      05. 
      06.for(NSString* line in lines)
      07.{
      08. 
      09.if ([line hasPrefix:@"BEGIN"])
      10.{
      11.NSLog(@"parse start");
      12.}
      13.else if ([line hasPrefix:@"END"])
      14.{
      15.NSLog(@"parse end");
      16.}
      17.else if ([line hasPrefix:@"N:"])
      18.{
      19.NSArray *upperComponents = [line componentsSeparatedByString:@":"];
      20.NSArray *components = [[upperComponents objectAtIndex:1] componentsSeparatedByString:@";"];
      21. 
      22.NSString * lastName = [components objectAtIndex:0];
      23.NSString * firstName = [components objectAtIndex:1];
      24. 
      25.NSLog(@"name %@ %@",lastName,firstName);
      26. 
      27.}
      28.else if ([line hasPrefix:@"EMAIL;"])
      29.{
      30.NSArray *components = [line componentsSeparatedByString:@":"];
      31.NSString *emailAddress = [components objectAtIndex:1];
      32.NSLog(@"emailAddress %@",emailAddress);
      33. 
      34.}
      35.else if ([line hasPrefix:@"TEL;"])
      36.{
      37.NSArray *components = [line componentsSeparatedByString:@":"];
      38.NSString *phoneNumber = [components objectAtIndex:1];
      39.NSLog(@"phoneNumber %@",phoneNumber);
      40.}
      41.}
      42. 
      43.}

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多