ios - How to Get updated/added/deleted contact using CNContactStoreDidChangeNotification -


i made app using contact book contacts.

problem:- update/add/delete contact contact book app.

my app applicationdidbecomeactive active write following code :-

notificationcenter.default.addobserver(         self,         selector: #selector(self.addressbookdidchange),         name: nsnotification.name.cncontactstoredidchange,         object: nil) 

after addressbookdidchange method called multiple times , app ui freeze. tried load contact in background app crash randomly.

1) contact array declaration :-

 public var globalcontactarray = [contactentry]() 

2)load contact in background :-

    dispatchqueue.main.async     {              pkhud.sharedhud.contentview = pkhudprogressview()             pkhud.sharedhud.show()      }     dispatchqueue.global(qos: .background).async    {         self.requestaccesstocontacts         { (success) in             if success             {                 self.retrievecontacts({ (success, contacts ) in                      if success && (contacts?.count)! > 0                     {                         self.globalcontactarray = contacts!                          arrcontact in contacts!                         {                             self.getstoreconatcts(arrcontact)                         }                       }                 })             }         }     } 

3) retrievecontacts method :-

self.globalcontactarray.removeall()                   {             let contactsfetchrequest = cncontactfetchrequest(keystofetch: [cncontactgivennamekey cnkeydescriptor, cncontactfamilynamekey cnkeydescriptor, cncontactimagedatakey cnkeydescriptor, cncontactimagedataavailablekey cnkeydescriptor, cncontactphonenumberskey cnkeydescriptor, cncontactemailaddresseskey cnkeydescriptor])             try contactstore.enumeratecontacts(with: contactsfetchrequest, usingblock:             {                 (cncontact, error) in                 if let contact = contactentry(cncontact: cncontact)                 {                     if self.globalcontactarray.contains(contact)                     {                      }                     else                     {                         self.globalcontactarray.append(contact)                     }                   }             })                  if self.globalcontactarray.count == 0                 {                  }                 else                 {                     if constants.islogin == "1"                     {                         dispatchqueue.main.async                         {                             notificationcenter.default.post(name: notification.name("loadcontactlist"), object: nil)                         }                      }                     else                     {                         userdefaults.standard.set(true, forkey: "contactviewdisapper")                         userdefaults.standard.synchronize()                     }                  }              completion(true, self.globalcontactarray)         }         catch         {             completion(false, nil )         } 

4) after completion of method update/add contact in local db using core database.for add/update local db method name "self.getstoreconatcts(arrcontact)".in pass 1 one contact.using contact check in db if available update contact , not available add contact.

i followed above steps contact update/add/delete app crash randomly.

so have solution how load method in background please me.

thanks in advance.

try using swiftycontacts cocoapods library.

https://cocoapods.org/pods/swiftycontacts

fetch contacts on background thread

fetchcontactsonbackgroundthread(completionhandler: { (result) in     switch result{         case .success(response: let contacts):             // thing here [cncontacts] array                 break         case .error(error: let error):             print(error)             break     } }) 

add contact

let contact : cnmutablecontact = cnmutablecontact() contact.givenname = "satish" // or use contact.mutablecopy() cncontact  addcontact(contact: contact) { (result) in     switch result{         case .success(response: let bool):             if bool{                 print("contact sucessfully added")             }             break         case .error(error: let error):             print(error.localizeddescription)             break     } } 

delete contact

// use contact.mutablecopy() convert cncontact cnmutablecontact deletecontact(contact: contact) { (result) in     switch result{         case .success(response: let bool):             if bool{                 print("contact sucessfully deleted")             }             break         case .error(error: let error):             print(error.localizeddescription)             break     } } 

Comments

Popular posts from this blog

neo4j - finding mutual friends in a cypher statement starting with three or more persons -

php - How to remove letter in front of the word laravel -

minify - Minimizing css files -