2016-10-30 2 views
1

아래 코드로 사용자의 연락처를 찾으려고합니다.이 코드는 UITableViewController의 구현에 있습니다. 두 코드 블록에 중단 점을 넣었으며 completionBlock이 호출되는 동안 userIdentityDiscoveredBlock이 호출되지 않았 음을 확인했습니다.CKDiscoverAllUserIdentitiesOperation에서 사용자를 검색 가능하게 만드는 이유는 무엇입니까?

시뮬레이터에서 실행 중이지만 시뮬레이터가 모든 iCloud 연락처를 동기화했음을 확인했습니다. (연락처 프로그램을 열면 해당 연락처가 열립니다. 시뮬레이터는 내 모든 연락처를 보여줍니다.)

override func viewDidLoad() { 
    super.viewDidLoad() 

    let op = CKDiscoverAllUserIdentitiesOperation() 

    op.discoverAllUserIdentitiesCompletionBlock = { error -> Void in 
     // reload my data table 
    } 

    op.userIdentityDiscoveredBlock = { user -> Void in 
     if user.hasiCloudAccount { 
      self.iCloudUsers.append(user) 
     } else { 
      self.nonICloudUsers.append(user) 
     } 
    } 

    CKContainer.default().add(op) 
} 

내 질문은 이것입니다. 연락처를 찾기 위해서? 이것은 시뮬레이터 문제입니까?

은 내가 documentation과 다른 질문을 검색하지만 난이 주어진 작업에 대한 정보 새로운를 찾을 수 없습니다 아이폰 OS 10

답변

0

CKDiscoverAllUserIdentitiesOperation이 어떤 결과를 반환하기 전에 수행해야합니다 꽤가있다.

먼저 앱의 각 사용자는 이메일로 조회 할 권한을 부여해야합니다. 앱에서 CKContainer requestApplicationPermission을 사용하여 요청합니다.

앱의 각 사용자는 iCloud 계정에도 로그인해야합니다. iCloud 드라이브는 사용자가 활성화해야합니다.

마지막으로 CKDiscoverAllUserIdentitiesOperation이 모든 사용자를 반환하려면 그 사람은 이전 단계를 모두 완료 한 다른 사용자와 일치하는 이메일 주소를 가진 연락처가 있어야합니다.

+0

부머,하지만 고마워! 나는 [더 이상 사용되지 않는 것] (https://developer.apple.com/reference/cloudkit/ckdiscoverallcontactsoperation)보다 쉽지 않기를 바랬지 만 그렇지 않은 것 같습니다. –

+0

왜 그것은 어리석은 짓입니까? 앱에 몇 줄의 코드를 추가하면됩니다. – rmaddy

+0

맞아요. 큰 문제는 아니지만, 사용자가 선택했던 것 대신 모든 연락처를 볼 수있게되기를 바랬습니다. 이해할 수 있습니다. –