5

CloudKit의 초기화 메소드를 작성하고 있습니다. 내가 겪고있는 문제는 사용자 ID/계정 상태를 가져 오는 동안 발생합니다.-FetchUserRecordIDWithCompletionHandler의 iOS CloudKit 충돌 완료 블록 :

저는 [[CKContainer defaultContainer] fetchUserRecordIDWithCompletionHandler:]입니다.

나중에 충돌이 발생하고 디버거에서 "Queue : com.apple.cloudkit.operation.callback (serial) queue"스레드로 연결됩니다.

이 메소드는 실행되어야하는 콜백이있는 유일한 CloudKit 관련 메소드입니다.

여기 방법 자체입니다 :

[[CKContainer defaultContainer] fetchUserRecordIDWithCompletionHandler:^(CKRecordID *recordID, NSError *error) { 
    NSLog(@"CLOUDKIT Fetching User Record ID"); 

    if (error) { 
     NSLog(@"[%@] Error loading CloudKit user: %@", self.class, error); 
    } 

    if (recordID) { 
     NSLog(@"CLOUDKIT Found User Record ID: %@", recordID.recordName); 

     // If there is a record ID we check for account status 
     [[CKContainer defaultContainer] accountStatusWithCompletionHandler:^(CKAccountStatus accountStatus, NSError *error) { 
      NSLog(@"CLOUDKIT Finding Account Status"); 

      if (error) { 
       NSLog(@"[%@] Error checking CloudKit availability: %@", self.class, error); 
      } 

      if (accountStatus == CKAccountStatusAvailable) { 
       NSLog(@"CLOUDKIT Account Available, beginning initial sync"); 
       // We have an available account. If we have a new user do a complete sync 
       NSString *userRecordID = [[NSUserDefaults standardUserDefaults] stringForKey:CLOUD_KIT_CURRENT_USER_ID_USER_DEFAULT]; 
       if (userRecordID == nil || ![recordID.recordName isEqualToString:userRecordID]){ 
        [self syncAllData]; 
       } else { 
        // If there haven't been any updates, just sync as usual 
        [self syncChanges]; 
       } 

       // Subscribe to zone updates 
       [self subscribeToDefaultZoneUpdates]; 
      } else { 
       NSLog(@"[%@] Cloudkit account is either unavailable or restricted", self.class); 
      } 
     }]; 
    } else { 
     NSLog(@"[%@] CloudKit user Record ID not found", self.class); 
    } 
}]; 

전에 실행되고 있지만 맨 ("CLOUDKIT 가져 오기 사용자 레코드 ID")에서 NSLog가 실행되지 없구요 그이 후 NSLogs이 있습니다.

로그가 충돌하면 로그에 아무런 정보도 제공되지 않습니다. 다음은 엑스 코드에서 스레드 큐는 다음과 같습니다

enter image description here

이 여기에 실제로 디버그 탐색기에서 옷을 사는거야.

libsystem_kernel.dylib`__pthread_kill: 
0x332f7df4: mov r12, #0x148 
0x332f7df8: svc #0x80 
0x332f7dfc: blo 0x332f7e14    ; __pthread_kill + 32 
0x332f7e00: ldr r12, [pc, #4]    ; __pthread_kill + 24 
0x332f7e04: ldr r12, [pc, r12] 
0x332f7e08: b  0x332f7e10    ; __pthread_kill + 28 
0x332f7e0c: rsbeq lr, r6, #0x80000001 
0x332f7e10: bx  r12 
0x332f7e14: bx  lr 

구체적으로는 0x332f7dfc: blo 0x332f7e14 ; __pthread_kill + 32

+0

실제로 충돌이 있습니까? 의미, 디버거에서 "계속"을 누르면 계속 하시겠습니까? 무언가가 발생할 때까지 치는 것을 시도 했습니까? "모든 예외"중단 점이 활성화되어 있습니까? 어느 특정 라인을 침입하고 있습니까? Apple의 API가 어떤 이유로 든 치명적이지 않은 예외를 throw하는 경우가 있습니다. 저는 AVAudioPlayer에서이를 보았습니다. –

+0

계속 진행하면 새로운 정보를 얻지 못합니다. 내가 함정에 빠지기 전까지는 더 많은 집회가 열립니다. 그것은 나에게 줄 번호를주지 않는다. 휴식 시간은 디버그 탐색기에 있습니다. 실제로이 같은 모습을 깨는 – Jonathan

+0

점 : libsystem_kernel.dylib'__pthread_kill : 0x332f7df4 : mov 인 R12, # 0x148 0x332f7df8 : SVC# 0x80으로 0x332f7dfc : 0x332f7e14를 BLO; __pthread_kill + 32 0x332f7e00 : ldr r12, [pc, # 4]; __pthread_kill + 24 0x332f7e04 : ldr r12, [pc, r12] 0x332f7e08 : b 0x332f7e10; __pthread_kill + 28 0x332f7e0c : rsbeq lr, r6, # 0x80000001 0x332f7e10 : bx r12 0x332f7e14 : bx lr – Jonathan

답변

0

좋아요, 그래서 이것을 알아 냈습니다.

마지막 작업으로 롤백하고 FastPDFKit에 의해 생성 된 일부 바이너리를 제외한 모든 것을 변경했습니다. 내가 한 후에 그것은 잘 작동하기 시작했다. 아무리 엉망으로 망쳐 놓았는지 모르지만 지금은 효과가 있습니다.

2

당신의 방법의 순서에 위반되는 불완전/우 수 없습니다. 이것이 당신이해야 할 일입니다. 먼저 accountStatusWithCompletionHandler를 호출하여 iCloud에 로그인했는지 확인해야합니다. 그런 경우라면 requestApplicationPermission을 호출하여 iCloud를 쿼리 할 수 ​​있는지 확인해야합니다. 그리고 이것이 사실이라면 fetchUserRecordIDWithCompletionHandler를 실행하여 ID를 얻은 다음 discoverUserInfoWithUserRecordID를 실행하여 세부 사항을 가져올 수 있습니다. 샘플을보고 싶다면, Apple의 CloudKitAtlas 데모를보십시오. https://developer.apple.com/library/prerelease/ios/samplecode/CloudAtlas/Introduction/Intro.html#//apple_ref/doc/uid/TP40014599-Intro-DontLinkElementID_2

+0

나는 그것을 시도하고 그것은 여전히 ​​깨고있다. 나는 똑같은 일을하는 해골 앱을 만들었고 앱은 다른 곳에서 파산했다. 그것은 실제 출력이없는 SIGBART를 주었고 마지막 작업 버전으로 롤백해야했고 거기에서 앞으로 나아갈 것입니다. 아무 잘못인지 몰라. – Jonathan