2012-06-08 1 views
0

백그라운드 스레드에서 실행중인 NSOperation 문제가 있고 실행 실행 루프 performSelectorOnMainThread 호출하여 NSURLRequest, 호출 할 수 있지만 주 스레드는 해당 NSURLRequest .NSOperation performSelectorOnMainThread 호출

nsoperation의 목적은 코어 데이터 엔터티에서 json 문자열을 작성하는 것입니다. 코어 데이터 엔터티는 json 문자열을 대형 객체이기 때문에 꽤 오랜 시간이 걸릴 수 있습니다. 관리 대상 객체의 ID 참조 만 전달하고 다른 관리 대상 객체 컨텍스트를 사용하여 핵심 데이터 스레드 안전을 보장하므로 걱정할 필요가 없습니다.

모든 조언을 주시면 감사하겠습니다.

답변

0

NSOperation 초기화 기능이 잘못된 스레드의 개체를 사용하고 있지 않은지 확인하기 전에 Core Data로 이전에 나를 트 랩핑했습니다. 기억해 주시면 init 함수가 주 스레드에서 호출되었으므로 객체 컨텍스트를 초기화하고 main()에서 액세스하려고 시도했을 때 백그라운드 스레드가 손상되었습니다. printing the current thread ID이 실행중인 코드의 스레드 부분을 디버깅하는 데 도움이 될 수 있습니다.

+0

init은 managedobjectID 만 전달하고 다른 관리 객체 컨텍스트를 사용하여 백그라운드 스레드에서 가져 오기를 수행하므로 여기에는 아무런 문제가 없습니다. 전달 된 다른 것은 대표입니다. – stephen

+0

그럼 대리자 객체가 여전히 주위에 있는지 확인해보고 어쩌면 dispatch_async()와 같은 주 스레드에서 선택기를 호출하는 다른 방법을 시도해보십시오. –