2017-02-13 15 views
0

내가 아는 것들 중 대부분은 새 연락처 대신 AddressBook을 사용하고 있습니다. 나는 모든 사용자의 연락처의 이름과 전화 번호를 앱의 tableview에 표시하려고합니다. 그런 다음 해당 숫자가 이미 계정이 있는지 여부에 관계없이 상호 참조하는 API로 가져 가면 해당 계정 옆에 '친구 추가'버튼을 표시 할 수 있습니다. 권한을 요청하고 Swift3을 사용하고 iOS9 이상과 호환되는 모든 연락처를 배열로 가져 오는 빠르고 쉬운 방법이 있습니까? 내가 찾거나 연락처를 추가하는 것을 시도하고 있지 않다모든 사용자의 연락처 전화 번호 가져 오기 Swift3/iOS9 +

, 방금

+1

공식 문서는 이런 종류의 질문을 시작할 수있는 좋은 곳입니다. –

답변

10

두 조각 아래에 배열의 모든 번호와 이름이 도움이 될합니다. 나는 두 번 당신이 동일한 범위에 두 조각을 사용하는 경우 수행 할 필요가 없습니다 것입니다 가게 ...

허가 얻으려면 선언했습니다

let store = CNContactStore() 
    store.requestAccess(for: .contacts) { (isGranted, error) in 
     // Check the isGranted flag and proceed if true 
    } 

주소록을 읽으려면을 (I 무작위로 일부 키가 포함되어 있지만 적용 할 수있는 것은 고를 수 있습니다.) :

let contactStore = CNContactStore() 
    let keys = [CNContactPhoneNumbersKey, CNContactFamilyNameKey, CNContactGivenNameKey, CNContactNicknameKey, CNContactPhoneNumbersKey] 
    let request1 = CNContactFetchRequest(keysToFetch: keys as [CNKeyDescriptor]) 

    try? contactStore.enumerateContacts(with: request1) { (contact, error) in 
     for phone in contact.phoneNumbers { 
      // Whatever you want to do with it 
     } 
    } 
+1

클로저가 확인해야하는 오류를 제공 할 때 오류가 발생하는 이유는 무엇입니까? –

+0

죄송합니다. 나는 그것을 코드에서 복사하고 여분의 쓰레기를 버렸다. 내 코드에서 나는 닫을 때 던질 수있는 일을하고 있지만 do/catch를하는 것을 잊어 버렸다. 나는 대답을 편집 할 것이다. – ghostatron

+0

확실히 도움이됩니다! 어떤 함수 나'lazy var contacts :'CNContact = {/ * here * /}()'에서이 두 번째 스 니펫을 호출 할 것인가? http://stackoverflow.com/a/39066564/2868510 –