2012-12-08 3 views
1

취미 프로젝트에서 일하고 있습니다. 여유 시간에 천천히 업데이트되어 새로운 것을 배울 수 있습니다. 필자가 직면 한 하나의 걸림돌은 별도의 스레드에서 Core Data로 작업하고 있습니다. 필자는 핵심 데이터 동시성에 대한 Apple의 문서를 읽었으며 읽은 모든 것만으로도 직설적 인 것처럼 보였습니다. 그래서 물건을로드하는 동안 UI를 잠그고 싶지 않기 때문에 백그라운드 스레드에서 데이터를로드하기 위해 프로젝트를 업데이트하기 시작했습니다.스레드를 사용할 때 핵심 데이터 문제

핵심 데이터 개체가 주 스레드에로드 된 경우 프로젝트가 제대로 작동합니다. 백그라운드로드로 전환하면 충돌이 발생합니다. 스레드에

  • NSManagedObject로드와 나는 표준 출력이 잘 작동하고 올바른 모습에는 데이터를 출력 특성
  • 을의에 액세스 할 수 있습니다

    이 단계에서

    , 나는 그것을 확인할 수 있습니다.

  • 주 스레드에로드 된 데이터 개체의 바이너리 comparson 및 백그라운드 스레드에로드 된 데이터가 동일하다는 것을 증명합니다.

실제 문제는 NSData에서 카테고리 구현을 호출 할 때 발생합니다. NSData 객체가 백그라운드 스레드에로드 될 때 괜찮 았는지 확인할 수 있습니다.로드 된 후에 NSData 객체에서 일부 작업을 수행하는 함수를 호출 할 때만 문제가 발생합니다. 문제는 EXC_BAD_ACCESS입니다. 이는 일반적으로 객체의 주소가 잘못되었음을 의미하지만 이는별로 의미가 없습니다.

나는 분명히 또는 명백한 어떤 잘못을 얻고있을 것입니다. 그러나 나는 단지 숲의 숲을 볼 수 없습니다.

당신은 당신이 여기에 코드를 찾을 수 있습니다 내 미치게있어 당신이에 어떤 조언을 제공 할 수 있습니다 생각하는 경우 :

http://github.com/BananaIguana/SMKEditor

문제가 ProcessWindowController.m입니다. 전 처리기 'THREADED_PROCESSING'을 변경하면 NSData + Decompressor.m에서 앱이 다운됩니다.

+0

'EXC_BAD_ACCESS'가 주어지면 좀비가 의심됩니다. 명확하게하기 위해 Instruments와 함께 실행할 수 있습니까? 또한'ProcessWindowController'' doIt' 메쏘드에서 여러분의'NSManagedObjectContext' 할당이 거슬러 올라가는 것을 알고 있습니까? 'THREADED_PROCESSING'이 정의되지 않았 으면 스레드 된 컨텍스트를 지정하는 것처럼 보입니다. – FluffulousChimp

+0

Oh yeh 틀림없이 틀린 문맥이 현재 버전에 할당되어 있지만 의도 한대로 전환해도 아무런 차이가 없습니다. 나는 많은 성공을 이룩하지 못했다. 나는 개발 빌드를 위해 기본적으로 활성화 된 좀비 오브젝트를 가지고 있으며, 인스 트루먼 테이션이 아무 것도받지 못한다는 것을 확인할 수 있습니다. 인스트루먼트를 통해 앱을 실행하면 앱이 충돌합니다. 디버거에서 나는 EXC_BAD_ACCESS 코드 2를 얻는다. –

+0

그냥 스레드 처리를 사용하기 위해 정의를위한 틀린 길인 컨텍스트에 대한 수정을 푸시했다. 그 점을 지적 해 주셔서 감사합니다. –

답변

0

좋아요. 마침내 문제가 무엇인지 알아 냈습니다. 압축 해제 방법이 스레드의 스택 크기를 초과하여 이상한 & 임의 EXC_BAD_ACCESS가 실행됩니다.

디버거가이 경우 더 직접적인 단서를 생성 할 것으로 기대했을 것입니다.

올바른 '스택 오버플로'문제가 해결되었습니다.

관련 문제