iOS技巧之獲取本機(jī)通訊錄中的內(nèi)容

一思喊、在工程中添加AddressBook.frameworkAddressBookUI.framework
二懂牧、獲取通訊錄

1核无、在infterface中定義數(shù)組并在init方法中初始化

NSMutableArray *addressBookTemp;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ 
  addressBookTemp = [NSMutableArray array];
}

2,定義一個(gè) model, 用來存放通訊錄中的各個(gè)屬性
新建一個(gè)集成子 NSOject的類,在.h 中.

@interface TKAddressBook : NSObject { 
NSInteger sectionNumber; 
NSInteger recordID; 
NSString *name; 
NSString *email; 
NSString *tel;
}
@property NSInteger sectionNumber;
@property NSInteger recordID;
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *email;
@property (nonatomic, retain) NSString *tel;
@end

在.m文件中進(jìn)行synthesize

@implementation TKAddressBook
@synthesize name, email, tel, recordID, sectionNumber;
@end

3.獲取聯(lián)系人
在iOS6之后,獲取通訊錄需要獲得權(quán)限

//新建一個(gè)通訊錄類 
ABAddressBookRef addressBooks = nil; 
if ([[UIDevice currentDevice].systemVersion floatValue] >= 6.0) { addressBooks = ABAddressBookCreateWithOptions(NULL, NULL); 
//獲取通訊錄權(quán)限 
dispatch_semaphore_t sema = dispatch_semaphore_create(0); ABAddressBookRequestAccessWithCompletion(addressBooks, ^(bool granted, CFErrorRef error){dispatch_semaphore_signal(sema);}); 
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER); 
dispatch_release(sema); 
} else {
 addressBooks = ABAddressBookCreate(); 
}
//獲取通訊錄中的所有人
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBooks);
//通訊錄中人數(shù)
CFIndex nPeople = ABAddressBookGetPersonCount(addressBooks);
//循環(huán),獲取每個(gè)人的個(gè)人信息
for (NSInteger i = 0; i < nPeople; i++){
//新建一個(gè)addressBook model類
 TKAddressBook *addressBook = [[TKAddressBook alloc] init];
//獲取個(gè)人 
ABRecordRef person = CFArrayGetValueAtIndex(allPeople, i);
//獲取個(gè)人名字
 CFTypeRef abName = ABRecordCopyValue(person, kABPersonFirstNameProperty); 
CFTypeRef abLastName = ABRecordCopyValue(person, kABPersonLastNameProperty); 
CFStringRef abFullName = ABRecordCopyCompositeName(person); 
NSString *nameString = (__bridge NSString *)abName; 
NSString *lastNameString = (__bridge NSString *)abLastName;

if ((__bridge id)abFullName != nil) { 
    nameString = (__bridge NSString *)abFullName; 
} else { 
if ((__bridge id)abLastName != nil) { 
nameString = [NSString stringWithFormat:@"%@ %@", nameString, lastNameString]; 
      } 
  }
}

    addressBook.name = nameString; 
    addressBook.recordID = (int)ABRecordGetRecordID(person);; 
    ABPropertyID multiProperties[] = {
       kABPersonPhoneProperty, kABPersonEmailProperty 
};
NSInteger multiPropertiesTotal = sizeof(multiProperties) / sizeof(ABPropertyID);
for (NSInteger j = 0; j < multiPropertiesTotal; j++) { 
ABPropertyID property = multiProperties[j]; 
ABMultiValueRef valuesRef = ABRecordCopyValue(person, property); 
NSInteger valuesCount = 0; 
if (valuesRef != nil) valuesCount = ABMultiValueGetCount(valuesRef); 
if (valuesCount == 0) { 
CFRelease(valuesRef); continue; 
} 
//獲取電話號碼和email 
for (NSInteger k = 0; k < valuesCount; k++) { 
CFTypeRef value = ABMultiValueCopyValueAtIndex(valuesRef, k); 
switch (j) { 
case 0: {// Phone number 
addressBook.tel = (__bridge NSString*)value; break; } 
case 1: {// Email 
          addressBook.email = (__bridge NSString*)value;   
          break;   
                } 
            } 
          CFRelease(value); 
        } 
    CFRelease(valuesRef); 
} 
//將個(gè)人信息添加到數(shù)組中蚁阳,循環(huán)完成后addressBookTemp中包含所有聯(lián)系人的信息 
[addressBookTemp addObject:addressBook]; 
if (abName) CFRelease(abName);
 if (abLastName) CFRelease(abLastName); 
if (abFullName) CFRelease(abFullName);

三、顯示在table中
//行數(shù)
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
return 1;
}
//列數(shù)
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
return [addressBookTemp count];
}
//cell內(nèi)容
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
NSString *cellIdentifier = @"ContactCell"; 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; if (cell == nil){ 
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier]; } 
TKAddressBook *book = [addressBookTemp objectAtIndex:indexPath.row]; 
cell.textLabel.text = book.name; 
cell.detailTextLabel.text = book.tel; 
return cell;
}

列表效果

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鸽照,一起剝皮案震驚了整個(gè)濱河市螺捐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌移宅,老刑警劉巖归粉,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異漏峰,居然都是意外死亡糠悼,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門浅乔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來倔喂,“玉大人铝条,你說我怎么就攤上這事∠” “怎么了班缰?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長悼枢。 經(jīng)常有香客問我埠忘,道長,這世上最難降的妖魔是什么馒索? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任莹妒,我火速辦了婚禮,結(jié)果婚禮上绰上,老公的妹妹穿的比我還像新娘旨怠。我一直安慰自己,他們只是感情好蜈块,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布鉴腻。 她就那樣靜靜地躺著,像睡著了一般百揭。 火紅的嫁衣襯著肌膚如雪爽哎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天信峻,我揣著相機(jī)與錄音倦青,去河邊找鬼瓮床。 笑死盹舞,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的隘庄。 我是一名探鬼主播踢步,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼丑掺!你這毒婦竟也來了获印?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤街州,失蹤者是張志新(化名)和其女友劉穎兼丰,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體唆缴,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鳍征,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了面徽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片艳丛。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡匣掸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出氮双,到底是詐尸還是另有隱情碰酝,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布戴差,位于F島的核電站送爸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏暖释。R本人自食惡果不足惜碱璃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望饭入。 院中可真熱鬧嵌器,春花似錦、人聲如沸谐丢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽乾忱。三九已至讥珍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間窄瘟,已是汗流浹背衷佃。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蹄葱,地道東北人氏义。 一個(gè)月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像图云,于是被迫代替她去往敵國和親惯悠。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容