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이 있습니다.
로그가 충돌하면 로그에 아무런 정보도 제공되지 않습니다. 다음은 엑스 코드에서 스레드 큐는 다음과 같습니다
이 여기에 실제로 디버그 탐색기에서 옷을 사는거야.
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
실제로 충돌이 있습니까? 의미, 디버거에서 "계속"을 누르면 계속 하시겠습니까? 무언가가 발생할 때까지 치는 것을 시도 했습니까? "모든 예외"중단 점이 활성화되어 있습니까? 어느 특정 라인을 침입하고 있습니까? Apple의 API가 어떤 이유로 든 치명적이지 않은 예외를 throw하는 경우가 있습니다. 저는 AVAudioPlayer에서이를 보았습니다. –
계속 진행하면 새로운 정보를 얻지 못합니다. 내가 함정에 빠지기 전까지는 더 많은 집회가 열립니다. 그것은 나에게 줄 번호를주지 않는다. 휴식 시간은 디버그 탐색기에 있습니다. 실제로이 같은 모습을 깨는 – Jonathan
점 : 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