2016-07-08 20 views
0

Ich versuche, mit dem folgenden Code auf die Kontakte des Telefons zuzugreifen, aber der Benutzer wird nicht aufgefordert, mir die Erlaubnis zu geben.requestAccessForEntityType keine Benutzeranfrage

let store = CNContactStore() 
     store.requestAccessForEntityType(.Contacts) { granted, error in 
      guard granted else { 
       dispatch_async(dispatch_get_main_queue()) { 
        // user didn't grant authorization, so tell them to fix that in settings 
        print("error accessing adress book %@",error) 
       } 
       return 
      } 
      print("Access granted to adress book") 
      // get the contacts 

      var contacts = [CNContact]() 
      let request = CNContactFetchRequest(keysToFetch: [CNContactIdentifierKey, CNContactFormatter.descriptorForRequiredKeysForStyle(.FullName)]) 
      do { 
       try store.enumerateContactsWithFetchRequest(request) { contact, stop in 
        contacts.append(contact) 
       } 
      } catch { 
       print(error) 
      } 

      //TODO : Do something with the contacts 
      let formatter = CNContactFormatter() 
      formatter.style = .FullName 
      for contact in contacts { 
       print(formatter.stringFromContact(contact)) 
      } 
     } 

Antwort

0

Können Sie bitte genauer erläutern, was ist der genaue Fehler?

Ich habe Ihren Code auf einem iOS 9.2.1 Gerät versucht und der Code scheint gut zu funktionieren. Ich habe das Protokoll "Zugang zum Adressbuch" und die Kontaktinformationen erhalten.

Sie sollten die Geräteberechtigung unter Abstimmungen-> Datenschutz-> Kontakte prüfen, wenn Sie Fehler Domain = CNErrorDomain Code = 100 Fehler "Zugriff verweigert" haben.

Nur für den Fall, wenn Sie in der Eingabeaufforderung Zugriffsberechtigung auf "Nicht zulassen" geklickt haben und jetzt die Einstellung gespeichert wurde und Sie keine Eingabeaufforderung erhalten, können Sie Ihre Paketkennung ändern, um Ihren Code zu testen.

Wenn Sie alle Datenschutzeinstellungen zurücksetzen müssen: https://stackoverflow.com/a/12596350/4209778