1

, 나는 다음과 같은 saveToURL 통화 (NSError의 할당이 해제 된 인스턴스에 보낸 메시지) 제목에 오류가있어 가능 할당이 해제 된 인스턴스에 보낸 메시지 추적은 다음과 같습니다 :- [NSError 유지] :</p> <pre><code>[aDocument saveToURL:aDocument.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:^(BOOL success) { ... </code></pre> <p>스택 : 좀비와

enter image description here

aDocument이 UIManagedDocument의 서브 클래스의 인스턴스입니다. 내가 동시성 디버그를 가지고 있고 어떤 스레딩 충돌이 있는지 아직 보지 못했습니다. 어떻게 디버깅 할 수 있습니까?

편집 : 또한

__weak typeof(self) weakSelf = self; 

    [aDocument saveToURL:aDocument.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:^(BOOL success) { 
     if (success) { 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       [weakSelf documentSaved:aDocument forRestoredAssessment:patientAssessment]; 
      }); 
     } 
    }]; 

EDIT 발생하는 같은 충돌에 다음 코드를 시도 : 현상금 그것은 완료 블록 코드를 호출하는 객체가 그 시간에 주위를하지 않을 수 있습니다 보인다

+1

완성품 내부에서 뭐하고 있니? – ppalancica

+0

이 메서드는 ... [self documentSaved : aDocument forRestoredAssessment : patientAssessment]; 엄청난 양의 것들이 있습니다. –

+0

일반적으로 UIKit의 아무 것도 건드리지 않거나 메인 큐가 아닌 스레드의 UIKit과 직접적으로 관련이 있습니다. 나는 이것이 그 문제의 핵심이라고 생각할 것이다. – Mgetz

답변

0

다음 변경 사항을 적용한 후 오류가 사라진 이후로 나는이 문제의 원인을 알아 냈다고 생각합니다. 이 오류는 원인을 직접 지적하지 않았기 때문에 해결하기가 까다 롭습니다.

UIDocumentSaveForOverwriting을 사용하고 있었지만 파일이 이미 다른 프로세스에서 이미 삭제되었음을 발견했습니다.

그래서 파일 존재 여부를 테스트 한 다음이를 기반으로 UIDocumentSaveForOverwriting 또는 UIDocumentSaveForCreating을 사용했습니다.

-1

을 추가, 그래서 당신은 그걸 지키기위한 어떤 방법이 필요합니다.

이 코드를보십시오 :

__weak typeof(self) weakSelf = self; 

dispatch_async(dispatch_get_main_queue(), ^{ 
    [weakSelf documentSaved:aDocument forRestoredAssessment:patientAssessment]; 
}); 

은 여전히 ​​문제가 있다면 알려주세요.

+0

해결책을 시도했습니다. 같은 오류가 발생합니다. 나는 그것이 블록 내부에서 충돌하고 있다고 생각하지 않는다. 다른 스레드가 동일한 작업을 수행하려고 할 때 저장을 시도하는 것과 관련이 있다고 생각합니다. –

+0

@BradThomas aDocument는 함수/메소드 또는 일부 클래스 변수의 로컬 변수입니까? – ppalancica

+0

aDocument는 메소드 –