दिलचस्प पोस्ट
React.js में सरणी बच्चों के लिए अद्वितीय कुंजी को समझना एक एनएसएसटीइंग को एनएसएनम्बर में कैसे परिवर्तित करें दो तिथियों की तुलना एक सामान्य शब्दकोश के मूल्य की कुंजी हो रही है? एक MySQL डाटाबेस के प्रत्येक टेबल से सभी क्षेत्रों में खोजें मैं एक स्ट्रीम की सामग्री को दूसरे में कैसे कॉपी करूँ? क्यों लोग एक पायथन लिपि की पहली पंक्ति पर #! / Usr / bin / env अजगर लिखते हैं? Scanf का उपयोग करके रिक्त स्थान को कैसे दर्ज किया जा सकता है? एकाधिक फ़ील्ड्स द्वारा ऑब्जेक्ट्स की तुलना कैसे करें लोड पर css3 संक्रमण एनीमेशन? बूटस्ट्रैप 4 में लंबवत संरेखण असतत फूरियर की गणना कैसे करें? एंड्रॉइड में प्रोग्राम सूची चुनें आइटम सूची दृश्य यदि किसी तत्व में कोई वर्ग शामिल है तो टेस्ट करें? आपको कंप्यूटर की कुल रैम की संख्या कैसे मिलती है?

IOS पर सभी संपर्कों की एक सूची प्राप्त करें

मैं एक iPhone के सभी संपर्कों की एक सूची प्राप्त करना चाहता हूँ

मैंने Address Book संदर्भ की जांच की, मुझे कुछ याद आ गया, लेकिन मुझे नहीं पता था कि यह संपर्कों की सूची पाने के लिए एक विधि प्रदान करता है।

वेब के समाधान से एकत्रित समाधान "IOS पर सभी संपर्कों की एक सूची प्राप्त करें"

शायद ABPerson एबीएड्रेसबुककापीअरेरेओफ़ सभी लोग क्या कर सकते हैं?

उदाहरण :

 ABAddressBookRef addressBook = ABAddressBookCreate( ); CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople( addressBook ); CFIndex nPeople = ABAddressBookGetPersonCount( addressBook ); for ( int i = 0; i < nPeople; i++ ) { ABRecordRef ref = CFArrayGetValueAtIndex( allPeople, i ); ... } 

मेरे मूल उत्तर में, इस उत्तर के अंत में, मैं दिखाता हूं कि 9.0 से पहले के संस्करणों में आईओएस में संपर्कों को कैसे पुनर्प्राप्त करें, जो अन्य उत्तरों से जुड़ी कुछ समस्याओं का समाधान करता है।

लेकिन, अगर केवल आईओएस 9 और उसके बाद के संस्करणों का समर्थन करता है, तो Contacts इस्तेमाल करना चाहिए, पुरानी AddressBook फ्रेमवर्क का उपयोग करते समय कुछ परेशान करने वाली समस्याओं को दूर करना चाहिए।

इसलिए, IOS 9 में, आप Contacts ढांचे का उपयोग करेंगे:

 @import Contacts; 

आपके ऐप को संपर्कों तक पहुंच की आवश्यकता क्यों है यह समझाने के लिए आपको अपनी जानकारी। NSContactsUsageDescription अपडेट करना भी आवश्यक है, NSContactsUsageDescription जोड़ना।

और फिर ऐसा कुछ करें:

 CNAuthorizationStatus status = [CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts]; if (status == CNAuthorizationStatusDenied || status == CNAuthorizationStatusRestricted) { UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Access to contacts." message:@"This app requires access to contacts because ..." preferredStyle:UIAlertControllerStyleActionSheet]; [alert addAction:[UIAlertAction actionWithTitle:@"Go to Settings" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString] options:@{} completionHandler:nil]; }]]; [alert addAction:[UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:nil]]; [self presentViewController:alert animated:TRUE completion:nil]; return; } CNContactStore *store = [[CNContactStore alloc] init]; [store requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError * _Nullable error) { // make sure the user granted us access if (!granted) { dispatch_async(dispatch_get_main_queue(), ^{ // user didn't grant access; // so, again, tell user here why app needs permissions in order to do it's job; // this is dispatched to the main queue because this request could be running on background thread }); return; } // build array of contacts NSMutableArray *contacts = [NSMutableArray array]; NSError *fetchError; CNContactFetchRequest *request = [[CNContactFetchRequest alloc] initWithKeysToFetch:@[CNContactIdentifierKey, [CNContactFormatter descriptorForRequiredKeysForStyle:CNContactFormatterStyleFullName]]]; BOOL success = [store enumerateContactsWithFetchRequest:request error:&fetchError usingBlock:^(CNContact *contact, BOOL *stop) { [contacts addObject:contact]; }]; if (!success) { NSLog(@"error = %@", fetchError); } // you can now do something with the list of contacts, for example, to show the names CNContactFormatter *formatter = [[CNContactFormatter alloc] init]; for (CNContact *contact in contacts) { NSString *string = [formatter stringFromContact:contact]; NSLog(@"contact = %@", string); } }]; 

आईओएस 9.0 से पहले आईओएस संस्करणों का समर्थन करते समय नीचे मेरा जवाब लागू होता है

कुछ ही प्रतिक्रियाओं के लिए आपके प्रश्न को न केवल, बल्कि यहां दिए गए उत्तरों में से कई (जो कि अनुमति के अनुरोध में विफल हैं, ABAddressBookCreateWithOptions त्रुटियों को ठीक से या लीक को संभालना नहीं):

  1. जाहिर है, पता AddressBook ढांचे को आयात करें:

     #import <AddressBook/AddressBook.h> 

    या

     @import AddressBook; 
  2. आपको एप को संपर्कों तक पहुंचने के लिए अनुमति के लिए अनुरोध करना होगा। उदाहरण के लिए:

     ABAuthorizationStatus status = ABAddressBookGetAuthorizationStatus(); if (status == kABAuthorizationStatusDenied || status == kABAuthorizationStatusRestricted) { // if you got here, user had previously denied/revoked permission for your // app to access the contacts and all you can do is handle this gracefully, // perhaps telling the user that they have to go to settings to grant access // to contacts [[[UIAlertView alloc] initWithTitle:nil message:@"This app requires access to your contacts to function properly. Please visit to the \"Privacy\" section in the iPhone Settings app." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show]; return; } CFErrorRef error = NULL; ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error); if (!addressBook) { NSLog(@"ABAddressBookCreateWithOptions error: %@", CFBridgingRelease(error)); return; } ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) { if (error) { NSLog(@"ABAddressBookRequestAccessWithCompletion error: %@", CFBridgingRelease(error)); } if (granted) { // if they gave you permission, then just carry on [self listPeopleInAddressBook:addressBook]; } else { // however, if they didn't give you permission, handle it gracefully, for example... dispatch_async(dispatch_get_main_queue(), ^{ // BTW, this is not on the main thread, so dispatch UI updates back to the main queue [[[UIAlertView alloc] initWithTitle:nil message:@"This app requires access to your contacts to function properly. Please visit to the \"Privacy\" section in the iPhone Settings app." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show]; }); } CFRelease(addressBook); }); 
  3. ऊपर ध्यान दें, मैंने अन्य लोगों द्वारा सुझाए गए पैटर्न का उपयोग नहीं किया है:

     CFErrorRef *error = NULL; ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error); 

    वह सही नहीं है। जैसा कि आप ऊपर देखेंगे, आप चाहते हैं:

     CFErrorRef error = NULL; ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error); 

    पूर्व पैटर्न त्रुटि को सही ढंग से कैप्चर नहीं करेंगे, जबकि बाद में होगा यदि error NULL नहीं थी, तो CFRelease को मत भूलना (या एआरसी को स्वामित्व जैसे मैंने किया था) या फिर आप उस वस्तु को रिसाव करेंगे।

  4. संपर्कों के माध्यम से पुनरावृति करने के लिए, आप चाहते हैं:

     - (void)listPeopleInAddressBook:(ABAddressBookRef)addressBook { NSArray *allPeople = CFBridgingRelease(ABAddressBookCopyArrayOfAllPeople(addressBook)); NSInteger numberOfPeople = [allPeople count]; for (NSInteger i = 0; i < numberOfPeople; i++) { ABRecordRef person = (__bridge ABRecordRef)allPeople[i]; NSString *firstName = CFBridgingRelease(ABRecordCopyValue(person, kABPersonFirstNameProperty)); NSString *lastName = CFBridgingRelease(ABRecordCopyValue(person, kABPersonLastNameProperty)); NSLog(@"Name:%@ %@", firstName, lastName); ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty); CFIndex numberOfPhoneNumbers = ABMultiValueGetCount(phoneNumbers); for (CFIndex j = 0; j < numberOfPhoneNumbers; j++) { NSString *phoneNumber = CFBridgingRelease(ABMultiValueCopyValueAtIndex(phoneNumbers, j)); NSLog(@" phone:%@", phoneNumber); } CFRelease(phoneNumbers); NSLog(@"============================================="); } } 
  5. मैं आपकी ओर से एक महत्वपूर्ण कुंजी विवरण, जैसे "बनाएँ नियम" पर ध्यान आकर्षित करना चाहता हूं:

    कोर फाउंडेशन फ़ंक्शंस के नाम हैं जो दर्शाते हैं कि आपके द्वारा लौटे गए ऑब्जेक्ट के स्वामी हैं:

    • ऑब्जेक्ट-सृजन फ़ंक्शंस जो " Create " नाम में एम्बेड किए गए हैं;

    • ऑब्जेक्ट-डुप्लेक्शन फ़ंक्शन जिनके पास " Copy " नाम पर एम्बेड किया गया है।

    यदि आप किसी वस्तु के मालिक हैं, तो यह स्वामित्व छोड़ने की आपकी ज़िम्मेदारी है (सीएफआरईलीज़ का उपयोग करके) जब आप इसे समाप्त कर लेंगे

    इसका अर्थ है कि आप किसी भी कोर फाउंडेशन फ़ंक्शन द्वारा दिए गए किसी भी ऑब्जेक्ट को रिहा करने की ज़िम्मेदारी लेते हैं। आप या तो CFRelease स्पष्ट रूप से कॉल कर सकते हैं (जैसा कि पता addressBook और फोन CFRelease साथ किया था) या ऑब्जेक्ट्स के लिए टोल फ्री ब्रिजिंग का समर्थन करता है, आप __bridge_transfer या CFBridgingRelease साथ एआरसी को स्वामित्व हस्तांतरित कर सकते हैं (जैसा कि मैंने सभी लोगों के साथ ऊपर किया, अंतिम firstName , allPeople , और phoneNumber )

    स्थैतिक विश्लेषक (Xcode में Shift + Command + B दबाएं या "उत्पाद" मेनू से "विश्लेषण करें" चुनें) कई स्थितियों की पहचान कर सकते हैं जिसमें आप "बनाएँ नियम" का पालन करने की उपेक्षा करते हैं और उपयुक्त वस्तुएं जारी करने में विफल रहे हैं। इसलिए, जब भी कोर फाउंडेशन कोड इस तरह लिखते हैं, तो हमेशा इसे स्थिर विश्लेषक के माध्यम से चलाने के लिए सुनिश्चित करें कि आपके पास कोई स्पष्ट लीक नहीं है।

सभी नामों + अंतिम नाम + फ़ोननबैंड (आईओएस 6) को प्रदर्शित करने के लिए इस कोड का उपयोग करें। सिम्युलेटर पर भी काम करता है:

 CFErrorRef *error = NULL; ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error); CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook); CFIndex numberOfPeople = ABAddressBookGetPersonCount(addressBook); for(int i = 0; i < numberOfPeople; i++) { ABRecordRef person = CFArrayGetValueAtIndex( allPeople, i ); NSString *firstName = (__bridge NSString *)(ABRecordCopyValue(person, kABPersonFirstNameProperty)); NSString *lastName = (__bridge NSString *)(ABRecordCopyValue(person, kABPersonLastNameProperty)); NSLog(@"Name:%@ %@", firstName, lastName); ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty); for (CFIndex i = 0; i < ABMultiValueGetCount(phoneNumbers); i++) { NSString *phoneNumber = (__bridge_transfer NSString *) ABMultiValueCopyValueAtIndex(phoneNumbers, i); NSLog(@"phone:%@", phoneNumber); } NSLog(@"============================================="); } 

सुनिश्चित करें कि आपके पास उचित आयात है

 #import <AddressBook/AddressBook.h> 

फिर आप सभी संपर्कों के साथ CFArray ऑब्जेक्ट प्राप्त कर सकते हैं

 CFArrayRef ABAddressBookCopyArrayOfAllPeople (ABAddressBookRef addressBook); 

आईओएस 6 में, सुनिश्चित करें कि आप ABAddressBookCreateWithOptions उपयोग ABAddressBookCreateWithOptions , जो कि ABAddressBookCreateWithOptions का अद्यतन संस्करण है

 CFErrorRef * error = NULL; ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error); CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook); CFIndex numberOfPeople = ABAddressBookGetPersonCount(addressBook); for(int i = 0; i < numberOfPeople; i++){ ABRecordRef person = CFArrayGetValueAtIndex( allPeople, i ); // More code here } 

iOS 9.0 लिए अद्यतन ऐप्पल ने AddressBook का बहिष्कार किया है और अब उन्होंने Contacts ढांचे को जोड़ा है:

CNContactStore संपत्ति जोड़ें और इसे इस तरह परिभाषित करें:

 self.contactsStrore = [[CNContactStore alloc] init]; 

तब सभी संपर्कों को पढ़ने के लिए इन विधियों को जोड़ें:

 -(void)checkContactsAccess{ [self requestContactsAccessWithHandler:^(BOOL grandted) { if (grandted) { CNContactFetchRequest *request = [[CNContactFetchRequest alloc] initWithKeysToFetch:@[CNContactFamilyNameKey, CNContactGivenNameKey, CNContactNamePrefixKey, CNContactMiddleNameKey, CNContactPhoneNumbersKey]]; [self.contactsStrore enumerateContactsWithFetchRequest:request error:nil usingBlock:^(CNContact * _Nonnull contact, BOOL * _Nonnull stop) { NSLog(@"%@", contact.familyName); NSLog(@"%@", contact.givenName); NSLog(@"%@", contact.namePrefix); NSLog(@"%@", contact.middleName); NSLog(@"%@", contact.phoneNumbers); NSLog(@"============================================="); }]; } }]; } -(void)requestContactsAccessWithHandler:(void (^)(BOOL grandted))handler{ switch ([CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts]) { case CNAuthorizationStatusAuthorized: handler(YES); break; case CNAuthorizationStatusDenied: case CNAuthorizationStatusNotDetermined:{ [self.contactsStrore requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError * _Nullable error) { handler(granted); }]; break; } case CNAuthorizationStatusRestricted: handler(NO); break; } } 

आईओएस 9.0 = = पहले पता AddressBook फ्रेमवर्क का उपयोग करें आपको प्रवेश के लिए जांचना होगा और पहले उपयोगकर्ता संपर्कों का अनुरोध करना होगा:

 // Prompt the user for access to their Address Book data -(void)requestAddressBookAccess { YourViewController * __weak weakSelf = self; ABAddressBookRequestAccessWithCompletion(self.addressBook, ^(bool granted, CFErrorRef error) { if (granted) { dispatch_async(dispatch_get_main_queue(), ^{ [weakSelf accessGrantedForAddressBook]; }); } }); } -(void)checkAddressBookAccess { switch (ABAddressBookGetAuthorizationStatus()) { // Update our UI if the user has granted access to their Contacts case kABAuthorizationStatusAuthorized: [self accessGrantedForAddressBook]; break; // Prompt the user for access to Contacts if there is no definitive answer case kABAuthorizationStatusNotDetermined : [self requestAddressBookAccess]; break; // Display a message if the user has denied or restricted access to Contacts case kABAuthorizationStatusDenied: case kABAuthorizationStatusRestricted: { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Privacy Warning" message:@"Permission was not granted for Contacts." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; } break; default: break; } } 

महेश और वज़बोझन के लिए धन्यवाद, निम्नलिखित कोड मेरे लिए काम किया है:

 CFErrorRef * error = NULL; addressBook = ABAddressBookCreateWithOptions(NULL, error); ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) { if (granted) { dispatch_async(dispatch_get_main_queue(), ^{ CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook); CFIndex numberOfPeople = ABAddressBookGetPersonCount(addressBook); for(int i = 0; i < numberOfPeople; i++){ ABRecordRef person = CFArrayGetValueAtIndex( allPeople, i ); NSString *firstName = (__bridge NSString *)(ABRecordCopyValue(person, kABPersonFirstNameProperty)); NSString *lastName = (__bridge NSString *)(ABRecordCopyValue(person, kABPersonLastNameProperty)); NSLog(@"Name:%@ %@", firstName, lastName); ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty); NSMutableArray *numbers = [NSMutableArray array]; for (CFIndex i = 0; i < ABMultiValueGetCount(phoneNumbers); i++) { NSString *phoneNumber = (__bridge_transfer NSString *) ABMultiValueCopyValueAtIndex(phoneNumbers, i); [numbers addObject:phoneNumber]; } NSMutableDictionary *contact = [NSMutableDictionary dictionary]; [contact setObject:name forKey:@"name"]; [contact setObject:numbers forKey:@"numbers"]; [all_contacts addObject:contact]; } }); } }); 

स्विफ्ट संस्करण:

 override func viewDidLoad() { super.viewDidLoad() var error: Unmanaged<CFErrorRef>? var addressBook: ABAddressBook = ABAddressBookCreateWithOptions(nil, &error).takeRetainedValue() if ABAddressBookGetAuthorizationStatus() == ABAuthorizationStatus.NotDetermined { ABAddressBookRequestAccessWithCompletion(addressBook, { (granted:Bool, error:CFErrorRef!) -> Void in self.populateFrom(addressBook: addressBook) }) } else if ABAddressBookGetAuthorizationStatus() == ABAuthorizationStatus.Authorized { self.populateFrom(addressBook: addressBook) } } func populateFrom(#addressBook:ABAddressBook){ let allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook).takeRetainedValue() let nPeople = ABAddressBookGetPersonCount(addressBook) for index in 0..<nPeople{ let person: ABRecordRef = Unmanaged<ABRecordRef>.fromOpaque(COpaquePointer(CFArrayGetValueAtIndex(allPeople, index))).takeUnretainedValue() let firstName: String = ABRecordCopyValue(person, kABPersonFirstNameProperty).takeUnretainedValue() as? String println("\(firstName.debugDescription)") } } 

https://github.com/heardrwt/RHAddressBook (254 सितारे 01/2014) देखें।

अधिक सरल API के साथ एड्रेस बुक के लिए ओबजेसी आवरण प्रदान करता है

यह आईओएस 7 और आईओएस 8 के लिए काम करता है, मुझे आशा है कि आप इसकी मदद करेंगे ………….

 NSMutableArray *result = [[NSMutableArray alloc] init]; CFErrorRef *error = nil; ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error); __block BOOL accessGranted = NO; if (ABAddressBookRequestAccessWithCompletion != NULL){ dispatch_semaphore_t sema = dispatch_semaphore_create(0); ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) { accessGranted = granted; dispatch_semaphore_signal(sema); }); dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER); } else{ accessGranted = YES; } if (accessGranted){ // If the app is authorized to access the first time then add the contact ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error); CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook); CFIndex numberOfPeople = ABAddressBookGetPersonCount(addressBook); for (int i=0; i<numberOfPeople; i++){ CFStringRef phone; ABRecordRef person = CFArrayGetValueAtIndex(allPeople, i); CFStringRef firstName = ABRecordCopyValue(person, kABPersonFirstNameProperty); CFStringRef lastName = ABRecordCopyValue(person, kABPersonLastNameProperty); NSString *userName = @"NoName"; userName = [NSString stringWithFormat:@"%@ %@", firstName, lastName]; userName = [userName stringByReplacingOccurrencesOfString:@"(null)" withString:@""]; ABMutableMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty); CFIndex phoneNumberCount = ABMultiValueGetCount( phoneNumbers ); phone = nil; for ( CFIndex ind= 0; ind<phoneNumberCount; ind++ ){ CFStringRef phoneNumberLabel = ABMultiValueCopyLabelAtIndex( phoneNumbers, ind); CFStringRef phoneNumberValue = ABMultiValueCopyValueAtIndex( phoneNumbers, ind); // converts "_$!<Work>!$_" to "work" and "_$!<Mobile>!$_" to "mobile" // Find the ones you want here if (phoneNumberLabel != nil){ NSStringCompareOptions compareOptions = NSCaseInsensitiveSearch; if(CFStringCompare(phoneNumberLabel, CFSTR("mobile"),compareOptions)){ phone = phoneNumberValue; } phone = phoneNumberValue; NSStringCompareOptions compareOptionss = NSCaseInsensitiveSearch; if(!CFStringCompare(phone, CFSTR("1-800-MY-APPLE"),compareOptionss)){ continue; } NSMutableArray *theKeys = [NSMutableArray arrayWithObjects:@"name", @"small_name",@"phone", @"checked", nil]; NSMutableArray *theObjects = [NSMutableArray arrayWithObjects:userName, [userName lowercaseString],phone, @"NO", nil]; NSMutableDictionary *theDict = [NSMutableDictionary dictionaryWithObjects:theObjects forKeys:theKeys]; if (![[functions formatNumber:(__bridge NSString *)(phone)] isEqualToString:[[NSUserDefaults standardUserDefaults]valueForKey:@"phoneNumber"]]){ [result addObject:theDict]; } } } } } //sort array NSSortDescriptor * descriptor = [[NSSortDescriptor alloc] initWithKey:@"small_name" ascending:YES]; // 1 NSArray * sortedArray = [result sortedArrayUsingDescriptors:[NSArray arrayWithObject:descriptor]]; 
 ABAddressBookRef addressBook = ABAddressBookCreate( ); CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople( addressBook ); CFIndex nPeople = ABAddressBookGetPersonCount( addressBook ); for ( int i = 0; i < nPeople; i++ ) { ABRecordRef ref = CFArrayGetValueAtIndex( allPeople, i ); ... } 

तालिका दृश्य के साथ सभी संपर्कों को लाने के लिए यह पूर्ण डेमो है

 import UIKit import ContactsUI import AddressBook import Contacts class ShowContactsVC: UIViewController,CNContactPickerDelegate,UITableViewDelegate,UITableViewDataSource { @IBOutlet weak var tableView: UITableView! let peoplePicker = CNContactPickerViewController() let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate var contacts = [CNContact]() var option : Int = 0 var userAccessGranted : Bool = false var dataArray : NSMutableArray? override func viewDidLoad() { super.viewDidLoad() peoplePicker.delegate = self self.checkIfUserAccessGranted() self.tableView.delegate = self self.tableView.dataSource = self navigationController!.navigationBar.barTintColor = UIColor.grayColor() if(self.userAccessGranted) { self.tableView.hidden = false fetchContacts() } } func numberOfSectionsInTableView(tableView: UITableView) -> Int { return 1 } func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { if dataArray == nil { return 0; } else{ return dataArray!.count } } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("TableCell", forIndexPath: indexPath) as! ContactsTableViewCell let data = dataArray![indexPath.row] as! Data; cell.lblName.text = data.name cell.imgContact.image = data.image return cell } func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { cell.backgroundColor = UIColor.cyanColor() } func checkIfUserAccessGranted() { appDelegate.requestForAccess { (accessGranted) -> Void in if accessGranted { self.userAccessGranted = true; }else{ self.userAccessGranted = false; } } } func fetchContacts() { dataArray = NSMutableArray() let toFetch = [CNContactGivenNameKey, CNContactImageDataKey, CNContactFamilyNameKey, CNContactImageDataAvailableKey] let request = CNContactFetchRequest(keysToFetch: toFetch) do{ try appDelegate.contactStore.enumerateContactsWithFetchRequest(request) { contact, stop in print(contact.givenName) print(contact.familyName) print(contact.identifier) var userImage : UIImage; // See if we can get image data if let imageData = contact.imageData { //If so create the image userImage = UIImage(data: imageData)! }else{ userImage = UIImage(named: "no_contact_image")! } let data = Data(name: contact.givenName, image: userImage) self.dataArray?.addObject(data) } } catch let err{ print(err) } self.tableView.reloadData() } func contactPickerDidCancel(picker: CNContactPickerViewController) { picker.dismissViewControllerAnimated(true, completion: nil) self.navigationController?.popToRootViewControllerAnimated(true) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } import UIKit class Data { let name : String let image : UIImage init(name : String, image : UIImage) { self.image = image self.name = name } } 

यदि आप वर्णमाला के अनुसार सॉर्ट करना चाहते हैं, तो आप नीचे कोड का उपयोग कर सकते हैं।

  CFErrorRef *error = NULL; ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error); CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook); CFIndex numberOfPeople = ABAddressBookGetPersonCount(addressBook); CFMutableArrayRef peopleMutable = CFArrayCreateMutableCopy(kCFAllocatorDefault, CFArrayGetCount(allPeople), allPeople); CFArraySortValues(peopleMutable, CFRangeMake(0, CFArrayGetCount(peopleMutable)), (CFComparatorFunction) ABPersonComparePeopleByName, kABPersonSortByFirstName);