2014-07-18 2 views
3

CloudKit으로 사용자 레코드 ID를 찾으려고합니다. 계정 상태가 CKAccountStatusAvailable임을 확인했습니다.CloudKit으로 사용자 레코드 ID를 가져 오지 못했습니다.

(lldb) po error 
<CKError 0x608000043990: "Not Authenticated" (9/1004); "Account couldn't get container scoped user id, no underlying error received"> 
(lldb) po [error userInfo] 
{ 
    NSDebugDescription = "CKInternalErrorDomain: 1004"; 
    NSLocalizedDescription = "Account couldn't get container scoped user id, no underlying error received"; 
    NSUnderlyingError = "<CKError 0x608000044080: \"Unknown Error\" (1004)>"; 
} 

은 "인증되지 않은"비트는 내가 아이 클라우드 계정 및 기타에 로그인하고있어 incorrect-- 것 같다 : 이것은 필연적으로 다음과 같은 결과로 실패

[[CKContainer defaultContainer] fetchUserRecordIDWithCompletionHandler:^(CKRecordID *recordID, NSError *error) { 
    if (error == nil) { 
     NSLog(@"Got user record ID (no permission req): %@", recordID); 
    } else { 
     NSLog(@"Couldn't get user record ID, error=%@", error); 
    } 
}]; 

: 그럼이 시도 iCloud 앱 (예 : TextEdit, Reminder)은 정상적으로 작동합니다 (어쨌든 내가 아니었다면 CKAccountStatusAvailable을 얻지 않아야 함). 내가 여기서 뭘 할 수 있니?

이 OSX에

, 요세미티 베타 3 업데이트 : 베타 4.

답변

5

의 변경 문제는 사용자 정의 CloudKit 용기 대 기본의 혼란이었다. 내 응용 프로그램을 사용자 지정 컨테이너를 사용하도록 구성했지만 코드에서 기본 컨테이너를 사용하려고했습니다 (기능을 설정할 때 약간 혼란 스러웠습니다). 어쨌든 열쇠는 응용 프로그램의 기능에서 컨테이너 이름을 얻은 다음 [CKContainer defaultContainer] 대신 [CKContainer containerWithIdentifier:]을 사용하여 런타임에 런타임에서 찾았습니다.

오류 메시지는 불행히도 도움이되지 않았으며, [CKContainer defaultContainer]이 nil을 반환하지 않았지만 어떤 경우에도 코드가 작동한다는 것에 놀랐습니다.

+0

Swift에서 : let container = CKContainer (식별자 : "컨테이너 이름") –

1

같은 문제가 있었는데 시뮬레이터에서 개발자 계정으로 iCloud를 사용하여 로그인하고 다른 하나를 전환 한 다음 작동했습니다.